Description:
In versions prior to v22.2, DevExpress Satellite assemblies for several cultures (German, Spanish, Japanese, and Russian) are installed in the GAC by default.
Sometimes it is necessary to remove them completely, or replace them and install new satellite assemblies. How to do this?
Answer:
You can use Satellite Assemblies Manager Tool to accomplish this task. The tool and its sources are attached.
Note that in v22.2 and later, our Unified Component Installer does not register satellite assemblies in the GAC by default. So, you need to register all assemblies manually and do not need to manually unregister them.
Hello Andrew,
I try to use your tool to remove the DevExpress Satellie assemblies. After runnng this tool - I select the Version for e.g. 15.1.6.
After cleanup my project (clean debug folder) and recompiling my project the folders "de, es, jp, ru" where new created!
A second start of your tool gives me an Exception (InvalidArgument = 0 of SelectedIndex) because there're no satellite assemblies found.
How to really remove the satellite assembly entries?
Hello Robert,
Satellite assemblies are also installed in the Binaries folder : c:\Program Files (x86)\DevExpress 15.1\Components\Bin\Framework. Please remove them from this location as well. However, I should mention that satellite assemblies are taken from this folder only if you manually reference the main assemblies from this folder (instead of GAC) and set the CopyLocal property to true.
We look forward to your reply once you’ve had the opportunity to remove the satellite assemblies from this folder.
Hello Andrew,
Thank your for your quick answer/solution. By removing the directories brought me the desired result.
I will examine whether these were referenced manually and will adjust it accordingly - many thanks again
Hi Robert,
I am happy to hear that the problem has been resolved. Thank you for letting us know of your progress. Please feel free to contact us if you have any further difficulties. We will be happy to assist you.
Tried this solution but the sourcecode won't load for some reason into VS2015 and if I run the binary, it says it can't find GACUtil. This is just painful. It doesn't really affect much with my software but I don't like having extra folders and such locally just to be there.
Hello,
The tool tries to locate the gacutil.exe file required for registering .NET assemblies in the GAC in the following folders:
[Program Files]\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\
[Program Files]\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\
[Program Files]\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\
[Program Files]\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\
where [Program Files] is the Program Files (x86) folder on a 64 bit machine and the Program Files folder - on a 32 bit machine.
Would you please manually check if the file is located in any of these folders.
Keep me posted.
I'm having the same issue as Ty Yanushka - it says GacUtil not found on 2 dev machines, both Win10 x64. GacUtil.exe is present in 8 locations, mostly \Program Files (x86)\ but none in \Program Files.
Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools 2016-02-20 23:20 138,912 gacutil.exe Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64 2016-02-20 23:20 160,928 gacutil.exe Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools 2016-01-04 23:50 139,936 gacutil.exe Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64 2016-01-04 23:50 161,944 gacutil.exe Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin 2016-02-20 23:20 103,248 gacutil.exe Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\x64 2016-02-20 23:20 110,416 gacutil.exe Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools 2016-02-20 23:20 130,632 gacutil.exe Directory of C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64 2016-02-20 23:20 146,504 gacutil.exe
Hello Simon,
The source code of this tool is included in the archive provided above (sources.zip)
You can modify/re-build it on your side. By default, it checks the following folders:
public SystemSettings() { WinDir = System.Environment.GetEnvironmentVariable("windir"); ProgramFilesFolder = Environment.GetEnvironmentVariable("ProgramFiles(x86)") == null ? Environment.GetEnvironmentVariable("ProgramFiles") : Environment.GetEnvironmentVariable("ProgramFiles(x86)"); GacutilPath = string.Empty; if(File.Exists(ProgramFilesFolder + @"\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe")) GacutilPath = ProgramFilesFolder + @"\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe"; else if(File.Exists(ProgramFilesFolder + @"\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe")) GacutilPath = ProgramFilesFolder + @"\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe"; }
You can check and extend this method to specify the GacUtil path according to your machine settings.
Simon,
As a follow-up.
I have also updated the source code of this tool.
Now if the GacUtil will be not found in default folders, the OpenFileDialog will be shown. In this dialog, you can select the location of the GacUtil on your machine.
Thank you Andrew, it works like a charm :)
An exception is raised if there are no entries available to remove -
comboBox1.SelectedIndex = 0;
should be: if (comboBox1.Items.Count > 0) comboBox1.SelectedIndex = 0;
Thanks again,
Simon
Hello Simon,
Thank you for your follow-up. I have updated the tool accordingly.
Please feel free to contact us if you have any further difficulties. We will be happy to assist you.
Following your instructions, and making print-screens I found the problem… When I used your tool for replacing the assemblies, I did not delete the existing ones… Now, I deleted the existing assemblies and replaced them with the new ones and everything worked like a charm…
Thanks so much!!
Daniel
Daniel,
I am happy to hear that the problem has been resolved. Thank you for letting us know of your progress.
P.S. Probably you intended to post this comment in the Missing some localizations… thread, rather than in this KB article.
Hi Andrew, any chance you could update the tool to search for gacutil.exe in the same folder as the tool's executable if it can't find it before it displays the file dialog. I'm using the tool on systems that don't have gacutil.exe installed, so I've copied it into a folder with the tool. Every time I run the tool, I have to manually locate and select gacutil.exe in the same folder.
Hello,
I have updated the tool so that it now uses the Publish class from the System.EnterpriseServices.dll assembly for managing satellite assemblies in GAC. So now it is not required to manually specify a directory where the gacutil.exe utility is located since the Publish utility can register and remove assemblies. Please find source files and binaries attached. I will update Andrew's answer once I perform all required tests. Please let me know if you notice any issues with the tool.
Thanks Alisher, I'll test this out soon. One other thing, is it possible to have the tool remove the localization assemblies from the devexpress installation in program files as well? I'm talking about the localization folders found in C:\Program Files (x86)\DevExpress 16.2\Components\Bin\Framework. The reason being, is that these files are still being picked up by Visual Studio, even after they've been removed from the GAC. So they end up appearing in my published files. So I have to manually go and delete them all after every devexpress update.
Hi,
Thank you for your feedback. I updated the tool and added an option to remove satellite assemblies from the installation folder. Please check the attachment.
Alisher,
thank you very much. This is something that makes life much easier ;-)
This solution is nice, but irrelevant when using any kind of Build Server where Dev does not have permissions to run anything. I really wish you add an option to simply opt-out the satellite assemblies even when CopyLocal is true.
I think that the easiest way would be to add some kind of setting to the csproj file and avoid the copy process of the satellite assemblies.
just my 2 cents.
Hi Itamar,
I am not sure I understand your requirement. If folders with satellite assemblies are removed from the installation folder, Visual Studio should not copy these assemblies to the output folder. The utility attached here is designed to remove these folders in one click. If you can't use it, remove the folders manually.
Hi Alisher,
i've used your tools in order to clean-up my development environment .
It's works fine… except this little think: when no satellite assembly were found the button "Select a folder which contains…" in not enabled.
Thank yo u for your good job
Regards
Fabio
You are welcome, Fabio. I will fix the issue with the button shortly. Feel free to reactivate this ticket if my further assistance is required.
Hello,
Is it posible to Gac register satellite folders using the Satellite Assemblies Manager tool?
After Gac satellite folders remove I need to register it again because some translation update, but as Fabio commented before there is no way to select the folders to do that.
Thanks,
Raul
Hi Raul,
Please try the attached version of the utility.
Hi Alisher,
With this version my problem is solved. I am very thankfull for your help.
Raul
Thank you,
this was very helpful for me too
Hi. The tool return "No satellite assemblies were found in GAC". And I not find any "de" "ru" etc assembly folders. (
Version=23.2.4.0
) and DotNet Framework 4.8.Hi Gionata,
Since v22.2 the localized resource assemblies are no longer installed by default - they are not registered in GAC and they are not installed in your system.
For DE,SP,JP you can install them, but you need to follow this procedure.
For other languages (like my case, European Portuguese) you can use the localization service to download the translation set and then you can register the language in GAC using the Satellite Assemblies Manager Tool.