我想回到這個話題,因爲我有同樣的問題和bozydar.sz(卸載.NET 4.5)的解決方案似乎不被我接受。當我將Windows Forms應用程序定位到.NET 3.5框架時,我發現了與Visual Studio 2012(Express,Desktop)相同的問題。我用ildasm
檢查了資源DLL,發現資源DLL是用4.0運行時構建的,即使目標框架是3.5。
使用VS2012 Express的相同問題已在Microsoft Dev Center上報告,但未報告解決方案。在Stackoverflow的another post上,VS2012和目標框架< 4.0也報告了此問題。提問者的解決方案是與Visual Studio的以前版本保持一致,這再次不是一個很好的解決方案。
我嘗試了「Build Action」和* .resx文件其他屬性的不同設置,但沒有成功。
接下來,我驗證了這個問題,如下所示:我安裝了Windows SDK for Windows 7 and .NET 3.5 SP1。從該Windows SDK 7.0的命令提示符處,我已經使用msbuild 3.5構建了Visual Studio 2012 sln文件。使用ildasm
檢查資源DLL這次給我版本2.0.50727,這是我期望的。當我使用從部署中的msbuild 3.5獲得的資源DLL替換原始部署的資源DLL(從VS2012發佈對話框到目標框架3.5和ToolsVersion 4.0)時,問題就解決了:Windows Forms應用程序的本地化是正確的現在。但是,使用msbuild 3.5並不是一個長期的解決方案。如果在VS2012中提供了目標框架3.5,我預計這會表現得很好。
在Visual Studio 2013 RC中,觀察到相同的行爲:資源DLL具有版本4.0而不是2.0。主應用程序無法加載資源DLL。
This answer用戶Dan Malcom到#2另一個問題導致我一個註冊表破解這對我的作品:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0]
"MSBuildToolsPath"="c:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"
"MSBuildToolsRoot"="c:\\Windows\\Microsoft.NET\\Framework64\\"
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\[email protected])"
"MSBuildRuntimeVersion"="4.0.30319"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\[email protected])"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0\\[email protected])"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\MSBuild\\ToolsVersions\\[email protected])"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\11.0]
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\[email protected])"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\[email protected])"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0\\[email protected])"
"WindowsSDK80Path"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\[email protected])"
在我的註冊表中的原始關鍵點是:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0]
"MSBuildToolsPath"="c:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\"
"MSBuildToolsRoot"="c:\\Windows\\Microsoft.NET\\Framework64\\"
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\[email protected])"
"MSBuildRuntimeVersion"="4.0.30319"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0A\\[email protected])"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0A\\[email protected])"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\MSBuild\\ToolsVersions\\[email protected])"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\11.0]
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\[email protected])"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\[email protected])"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\[email protected])"
"WindowsSDK80Path"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\[email protected])"
我導出的註冊表鍵,編輯它們結束運行該文件來糾正密鑰。對於註冊表的Wow6432Node
,我做了同樣的事情。在我原來的註冊表中存在
以下問題(必須是國家我安裝VS2012和Windows SDK 7.0後):
- 在
ToolsVersions\4.0
鍵引用從Windows SDK 7.0A關鍵的FrameworkSDKRoot
值(一個來自VS2010),但這個版本從未安裝在我的機器上。
- 這同樣適用於
SDK40ToolsPath
和SDK35ToolsPath
值。
ToolsVersions\4.0\11.0
鍵中的SDK35ToolsPath
值引用了一個不存在的WinSDK-NetFx35Tools-x86
。
- 在
Wow6432Node
中,所有FrameworkSDKRoot
,SDK35ToolsPath
或SDK40ToolsPath
都不正確(引用不存在的註冊表值)。
編輯註冊表可解決問題,但代價高昂:需要將此更改應用於每臺開發計算機/構建服務器。
你什麼時候設置'CurrentUICulture'?它必須在資源加載之前(即,在顯示任何表單之前,在程序開始時)。它絕對適用於.Net 3.5,我們將它用於我們所有的3.5 Windows窗體程序。 – 2013-05-14 08:33:12
我按照演練中所述的'InitializeComponent'方法在主窗體構造函數中設置它。只是爲了確保我在'Program.Main'方法開始時也改變了它,但它也沒有幫助 – 2013-05-14 08:37:41