.net - Hvad gacutil.exe skal jeg bruge?

Indlæg af Hanne Mølgaard Plasc

Problem



Så på en Win 2008 R2 Std x64 har jeg 6 (seks) gacutil.exe alle forskellige (ikke tæller dem i VS mapper) i:



  1. c: \ Programmer \ Microsoft SDK'er \ Windows \ v6.0A \ Bin

  2. c: \ Programmer \ Microsoft SDK'er \ Windows \ v6.0A \ Bin \ x64

  3. c: \ Programmer (x86) \ Microsoft SDK'er \ Windows \ v7.0A \ Bin

  4. c: \ Programmer (x86) \ Microsoft SDK'er \ Windows \ v7.0A \ Bin \ x64

  5. c: \ Programmer (x86) \ Microsoft SDK'er \ Windows \ v7.0A \ Bin \ NETFX 4.0 Værktøjer

  6. c: \ Programmer (x86) \ Microsoft SDK'er \ Windows \ v7.0A \ Bin \ NETFX 4.0 Værktøjer \ x64



Spørgsmål er:



  1. Har x64 versioner nogen forskel i adfærd?

  2. Skal jeg foretrække v7.0A versioner andre v6.0A?

  3. Skal jeg bruge NETFX 4.0 Tools versioner til. NET 4.0-enheder og 'standard' -version til resten?



Eller hvis der er en generel type artikel om emnet, vil jeg være taknemmelig.


Opdater 1. Vedrørende Hans Passants svar:



  1. gacutil.exe er en .NET Framework Tool del af en 'Build, Deployment og Configuration Tools (.NET Framework)' som nu forældet (!) shfusion.dll var;

  2. Faktisk v6.0A er fra VS2008 installere og kan ignoreres (1, 2);

  3. Den 64-bitte forklaringsteori lyder også rimeligt. Jeg antager også, at der sandsynligvis er en IA64 version af gacutil.exe, så det er som en 'værktøjskopi til hver platform', det er bare sket, så x86-versionen kører fint overalt på grund af WoW64. Minus 2 gacutil version fra listen (4, 6);

  4. Den del om hvilken version der skal bruges, synes at være forkert. V4.0 gacutil.exe opdager og placerer samling i henhold til det s target CLR, og fungerer fint for både .NET 4.0 og tidligere versioner. Så spørgsmålet er derfor, hvorfor forlade V2.0 gacutil.exe? Mit gæt ville være for Formålet med implementering på miljøer der. NET4.0 er utilgængeligt.

  5. For at bruge eller ikke bruge GAC, var det ikke i spørgsmålet. Så jeg forlader sidste afsnit uden kommentarer.



Opdater 2. [14] [15] [16]


Så for mig ser det ud som om man sikkert kan bruge enten nummer 3 (så er .NET4.0 ikke tilgængelig) eller nummer 5 ellers for alle GAC-operationer på Windows x86 og x64. Og svarene på spørgsmålene er:



  1. Ingen.

  2. Det betyder ikke noget, men brug af nyere versioner virker mere logiske.

  3. Nej, du kan altid bruge NETFX 4.0 Tools version (hvis .NET4.0 er tilgængelig) til alle GAC-operationer.


Bedste reference


Gacutil.exe er et Windows SDK-værktøj, ikke et .NET-rammeværktøj. Du har to versioner af SDK'en på din maskine. Du har 6.0A fra VS2008 installationen, 7.0A fra VS2010 installationen. Du har også et 64-bit operativsystem, så du har også 64-bit værktøjer. Det betyder ikke noget for gacutil.exe, ikke sikker på, hvorfor de indeholder det separat. Sandsynligvis for at holde Visual Studio Command Prompt i gang, bemærk at du har separate 32-bit og 64-bit versioner af det. Det betyder meget for C ++ VS2010 gør det muligt at målrette både CLR version 4 og CLR version 2, så 's 6 versioner i alt.


Hvad betyder meget er, at du har to GAC'er på din maskine. GAC for. NET 4-enheder er gemt i c: \ windows \ microsoft.net \ assembly. For tidligere versioner lagres den i c: \ windows \ assembly. Du skal bruge den korrekte version af gacutil.exe for at få en samling i den korrekte GAC. For en samling, der er målrettet mod .NET 4, skal du skal bruge den i Bin \ NETFX 4.0 Tools. Og for tidligere, skal du skal bruge den i Bin.


Hvis du ikke bruger det, er det bedst, at enhederne skal have den lokale Local Property-funktion på en dev-maskine. GAC er en implementeringsdetalje, du kommer i problemer, når din GAC har en samling, som din brugers GAC ikke har.

Andre referencer 1


Kort version: Hvis du har .NET 4.0 installeret, brug NETFX 4.0 Tools version. Ellers betyder det ikke rigtig noget.


Svar på spørgsmål:



  1. Ingen.

  2. Er det ikke noget, medmindre der ikke er nogen .NET 4.0 installeret, i hvilket tilfælde skal du bruge NETFX 4.0 Tools version. Ikke sikker på om det er muligt at have en v7.0 SDK og ikke have .NET 4.0 installeret .

  3. Nej, du kan altid (og skulle) bruge NETFX 4.0 Tools version til alle GAC-operationer.


Andre referencer 2


Dette er ikke det bedste svar, men jeg bemærker en observation. Brug den nyeste version mappe, baseret på hvad du bruger til, at din applikation udvikles til den tilknyttede Visual Studio installation.


C:Program Files (x86)Microsoft SDKsWindows{SDK version}inNETFX 4.5.1 Toolsgacutil.exe


Ved sammenligning af kontrolpanelet> Programmer og funktioner> 'Installeret til' dato for mine Visual Studio-installationer, ser jeg mange forskellige mapper under. Jeg gætter flere mapper blevet opdateret under disse to installationer.


Mapper, hvor 'gacutil.exe' er bosat og ændret dato:


C:Program Files (x86)Microsoft SDKsWindows
C:Program Files (x86)Microsoft SDKsWindowsv6.0A - 3/20/2014
C:Program Files (x86)Microsoft SDKsWindowsv7.0A - 3/20/2014
C:Program Files (x86)Microsoft SDKsWindowsv7.1A - 5/15/2015
C:Program Files (x86)Microsoft SDKsWindowsv8.0 - 3/20/2014
C:Program Files (x86)Microsoft SDKsWindowsv8.0A - 5/15/2015
C:Program Files (x86)Microsoft SDKsWindowsv8.1 - 5/15/2015
C:Program Files (x86)Microsoft SDKsWindowsv8.1A - 5/15/2015


Windows Visual Studio-installationer med 'Installeret On' -dato:


Visual Studio 2012 - 3/20/2014
Visual Studio 2013 - 5/15/2015


For at få en sammenligning af, hvad der er i GAC'en, kørte jeg denne kommando og differentierede filerne til sammenligning.


cd C:Program Files (x86)Microsoft SDKsWindowsv8.1AinNETFX 4.5.1 Tools
gacutil /l > c:v8.1A.gac.txt


Så ændrede jeg mappen korrekt for hver version.