我正在使用 VS 2013 构建作为单个 EXE 文件发布的 C# WinForms 应用程序。到目前为止,使用 ilmerge 作为构建后步骤以包含所有需要的 DLL 没有问题。甚至 ActiveX 组件也可以毫无问题地嵌入。
但是现在,我要使应用程序国际化,从而生成本地化的卫星资源程序集。我目前的解决方案如下:
- Build 在(例如)下生成 DLL .....
\en\MyApp.resources.dll
- 生成后操作将此 DLL 复制到
..\..\Resources\i18n\en
下次执行 Build 时,它将资源文件夹下的资源i18n\en
作为 Embedded Resource 嵌入到目标中。在我的应用程序中,我使用自己ResolveEventHandler
的AppDomain.CurrentDomain.AssemblyResolve
事件,从应用程序的内部资源中读取请求的 DLL。
这工作正常,但是:在提交涉及本地化 DLL 的更改后,我必须构建解决方案两次才能将新 DLL 放入输出 EXE。
使用ilmerge
for 包含附属程序集没有成功,因为它解压缩 DLL 并将其中包含的对象直接放入 EXE 文件中。
所以,我的问题是我是否可以修改 .csproj 文件,以便在生成 DLL 之后,我可以在将资源打包到输出二进制文件之前将其复制到资源目录中,而不是在第一次构建之后复制。这样一来,只需要一次构建过程,就可以避免错误。