Building Resource-Only DLL (With al.exe) Is Raising “assembly is built by a runtime newer than the currently loaded runtime”

让人想犯罪 __ 提交于 2020-01-17 04:23:05

问题


I am packaging resources; and I am successfully loading them from .resource files using ResourceManager.CreateFileBasedResourceManager. I want to instead create dll files with the resources, and load those with Assembly.LoadFrom; and then load the resources with new ResourceManager(string, Assembly). When I do this, I am getting:

"assembly is built by a runtime newer than the currently loaded runtime".

The project is a class library; and it is distributed and run inside of a "host" like a "plugin". The host is running .Net 3.5. My VS project is configured to target 3.5 ... and I am actually running al.exe manually to build the DLL.

I can run a test Program in my project (also set to target 3.5) and my code will load the Assembly (and find resources). But when the same code runs in the "host", I get the error.

I have tried every version of al.exe that I can find on my machine; and I specifically downloaded the .NET 3.5 SDK; which seemed to install into C:\Program Files\Microsoft SDKs\Windows\v7.0 but I always get the error no matter which version of al.exe I run.

Can someone help me build the dll so that it will load inside of this .NET 3.5 environment? --- Again it's a resource-only DLL. These are the post-build commands:

ResGen.exe AdResources.resx AdResources.resources
al.exe /target:lib /embed:AdResources.resources /culture:en /out:AdResources.resources.dll

The .cs code I use to load the Assembly and resources is like this:

string path = Path.Combine(InstallDir, "AdResources.resources.dll");
Assembly resAssembly = Assembly.LoadFrom(path);
ResourceManager temp = new ResourceManager("AdResources", resAssembly);

... Works when run in the IDE (targeting 3.5) but fails in the end host platform.


回答1:


I have solved this.

Despite Hans' comments, I solved it by USING the IDE (Community 2015 RC).

I created a new class library project. Set the target to .NET 3.5 --- and made sure the App.config said the same thing. Then I copy my .resx files (only) from my main project into this project. I removed the custom tool (that generates the strong names). And the output that the IDE builds will load just fine in my host environment!

So, very odd that I can use the IDE but not the tools, even when I use the 3.5 or 2.0 tools directly; and verify that the output manifest does say "// Metadata version: v2.0.50727"!

I created a Pre-Build script to copy my resx files from the main project; and a Post-Build script to copy this library into my target output folder. Working fine ...



来源:https://stackoverflow.com/questions/30729410/building-resource-only-dll-with-al-exe-is-raising-assembly-is-built-by-a-runt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!