构建仅限资源的DLL(使用al.exe)正在提升"程序集由比当前加载的运行时更新的运行时构建"

时间:2015-06-09 10:25:43

标签: .net localization

我正在打包资源;我使用ResourceManager.CreateFileBasedResourceManager从.resource文件成功加载它们。我想用资源创建dll文件,并使用Assembly.LoadFrom加载它们;然后使用新的ResourceManager(字符串,程序集)加载资源。当我这样做时,我得到了:

"程序集由比当前加载的运行时更新的运行时构建"。

该项目是一个类库;它是在一个"主机"内部分发和运行的。喜欢"插件"。主机正在运行.Net 3.5。我的VS项目配置为目标3.5 ...我实际上是手动运行al.exe来构建DLL。

我可以在我的项目中运行测试程序(也设置为目标3.5),我的代码将加载程序集(并查找资源)。但是当相同的代码在" host"中运行时,我得到了错误。

我已经尝试过在机器上找到的每个版本的al.exe;我特意下载了.NET 3.5 SDK;它似乎安装在C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0中,但无论我运行的是哪个版本的al.exe,我总是会收到错误。

有人可以帮我构建dll,以便加载到.NET 3.5环境中吗? ---它再次是一个资源专用的DLL。这些是构建后的命令:

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

我用来加载程序集和资源的.cs代码是这样的:

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

...在IDE中运行时(目标为3.5)但在终端主机平台中失败。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。

尽管Hans的评论,我通过使用IDE(Community 2015 RC)解决了这个问题。

我创建了一个新的类库项目。将目标设置为.NET 3.5 ---并确保App.config说同样的事情。然后我将我的.resx文件(仅)从我的主项目复制到这个项目中。我删除了自定义工具(生成强名称)。 IDE构建的输出将在我的主机环境中正常加载!

所以,很奇怪我可以使用IDE而不是工具,即使我直接使用3.5或2.0工具;并验证输出清单是否说“// Metadata version:v2.0.50727”!

我创建了一个Pre-Build脚本来从主项目复制我的resx文件;和一个Post-Build脚本,用于将此库复制到我的目标输出文件夹中。工作正常......