[英]Trying to build a WinForms application with all satellite resource assemblies included
我正在使用VS 2013構建一個作為單個EXE文件提供的C#WinForms應用程序。 到目前為止,使用ilmerge作為構建后步驟以包括所有需要的DLL沒問題。 甚至ActiveX組件也可以毫無問題地嵌入。
但是現在,我將使該應用程序國際化,這將導致生成本地化的衛星資源集合。 我當前的解決方案如下:
\\en\\MyApp.resources.dll
下生成DLL ..\\..\\Resources\\i18n\\en
下次執行Build時,它將資源文件夾i18n\\en
下的資源作為嵌入式資源嵌入到目標中。 在我的應用程序中,我對AppDomain.CurrentDomain.AssemblyResolve
事件使用自己的ResolveEventHandler
,從應用程序的內部資源讀取請求的DLL。
效果很好,但是:提交涉及本地化DLL的更改后,我必須構建兩次解決方案才能將新的DLL放入輸出EXE。
使用ilmerge
包含附屬程序集並不成功,因為它會解壓縮DLL,並將其中包含的對象直接放入EXE文件。
因此,我的問題是,是否可以通過以下方式修改.csproj文件:生成DLL之后,可以在將資源打包到輸出二進制文件中之前將其復制到資源目錄中,而不是在第一次構建后進行復制。 這樣,只需要一次構建過程就可以避免錯誤。
我現在可以正常工作了,但是它的方式與我最初尋找的方式不同。
我沒有使用Visual Studio / MS Build將DLL嵌入為嵌入式資源,而是制作了一個ResourceEmbedder工具,用於隨后嵌入資源。 它使用Mono.Cecil完成此操作。 所以現在的機制是:
AppDomain.CurrentDomain.AssemblyResolve
事件,以便在需要時提供附屬程序集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.