2015-06-09 32 views
0

我是打包資源;我使用ResourceManager.CreateFileBasedResourceManager從.resource文件成功加載它們。我想用這些資源創建dll文件,並用Assembly.LoadFrom加載它們;然後使用新的ResourceManager(string,Assembly)加載資源。當我這樣做時,我得到:構建純資源DLL(帶al.exe)正在提升「程序集由比當前加載的運行時更新的運行時構建」

「程序集由比當前加載的運行時更新的運行時構建」。

該項目是一個類庫;並且它像「插件」一樣在「主機」內部分發和運行。主機運行.Net 3.5。我的VS項目被配置爲目標3.5 ...我實際上正在手動運行al.exe來構建DLL。

我可以在我的項目中運行測試程序(也設置爲目標3.5),我的代碼將加載程序集(並查找資源)。但是當相同的代碼在「主機」中運行時,我得到錯誤。

我已經嘗試了我可以在我的機器上找到的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 )但在最終主機平臺上失敗。

+0

從你的代碼片斷,你很少有證據證明你正在運行正確版本的al.exe。使用ildasm.exe進行診斷,雙擊清單並查看第一行。當然,它現在說//元數據版本:v4.0.30319。錯誤的版本。您必須使用v2版本的al.exe,無論它是什麼,你都沒有提到你的VS版本。 –

+0

感謝漢斯。我一直在尋找v2版本的al.exe。我認爲我沒有找到它。 VS版本是Community 2015 RC。我能夠下載.NET 3.5 SDK:但該版本的al.exe沒有工作。我可以在C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727中看到.NET文件夾,但它沒有al.exe(僅限此運行時?)我即將嘗試使用csc ... –

+0

嘆了口氣,你不能用專爲業餘人士製作的工具做專業程序員的工作。微軟提供免費軟件,因爲他們知道遲早需要完整版本。它更快。 –

回答

0

我解決了這個問題。

儘管漢斯的評論,我通過使用IDE(社區2015 RC)解決了它。

我創建了一個新的類庫項目。將目標設置爲.NET 3.5 ---並確保App.config表示同樣的事情。然後,我將我的主項目中的.resx文件(僅)複製到此項目中。我刪除了自定義工具(生成強名稱)。 IDE構建的輸出將在我的主機環境中加載得很好!

所以,很奇怪我可以使用IDE而不是工具,即使我直接使用3.5或2.0工具;並驗證輸出清單確實說「//元數據版本:v2.0.50727」!

我創建了一個預生成腳本來複制我的resx文件從主項目;和生成後腳本將該庫複製到我的目標輸出文件夾中。正常工作...

+0

......我只是重新閱讀這個答案,只是想確保它聽起來不像我對漢斯的評論是否定的 - 恰恰相反。爲什麼我無法直接加載使用這些工具創建的庫(包括csc版本2;還有al版本3.5),這仍然很奇怪;但由IDE創建的目標設置爲3.5的庫將加載... –

相關問題