同じ問題があり、 bozydar.sz (.NET 4.5 のアンインストール) の解決策が受け入れられないように思われるため、このトピックを元に戻したいと思います。Windows フォーム アプリケーションのターゲットを .NET 3.5 フレームワークにすると、Visual Studio 2012 (Express、Desktop) で同じ問題が発生しました。リソース DLL を調べたildasm
ところ、ターゲット フレームワークが 3.5 であっても、リソース DLL が 4.0 ランタイムでビルドされていることがわかりました。
VS2012 Express を使用した場合と同じ問題が Microsoft Dev Centerで報告されていますが、解決策は報告されていません。Stackoverflowの別の投稿では、VS2012 およびターゲット フレームワーク < 4.0 についても問題が報告されています。質問者の解決策は、以前のバージョンの Visual Studio をそのまま使用することでしたが、これもあまり解決策ではありません。
「Build Action」および *.resx ファイルのその他のプロパティに対してさまざまな設定を試みましたが、成功しませんでした。
次に、この問題を次のように検証しました。Windows SDK for Windows 7 と .NET 3.5 SP1をインストールしました。その Windows SDK 7.0 のコマンド プロンプトから、msbuild 3.5 を使用して Visual Studio 2012 sln ファイルをビルドしました。リソース DLL を調べたildasm
ところ、今回はバージョン 2.0.50727 でした。元の展開のリソース DLL (ターゲット フレームワーク 3.5 および ToolsVersion 4.0 を使用した VS2012 パブリッシュ ダイアログから) を、展開で msbuild 3.5 から取得したリソース DLL に置き換えると、問題は解決されます: Windows フォーム アプリケーションのローカリゼーションは正しい今。それでも、msbuild 3.5 の使用は長期的な解決策ではありません。VS2012 でターゲット フレームワーク 3.5 が提供されている場合は、これが適切に動作することを期待します。
Visual Studio 2013 RC でも同じ動作が観察されました。リソース DLL のバージョンは 2.0 ではなく 4.0 です。リソース DLL は、メイン アプリケーションによってロードできません。
Stackoverflow に関する別の質問に対するユーザーのDan Malcomによるこの回答は、私にとって有効なレジストリ ハックにつながりました。
[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\\v8.0A@InstallationFolder)"
"MSBuildRuntimeVersion"="4.0.30319"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\WinSDK-NetFx40Tools-x86@InstallationFolder)"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0\\WinSDKNetFx35Tools@InstallationFolder)"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\MSBuild\\ToolsVersions\\4.0@MSBuildToolsPath)"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\11.0]
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A@InstallationFolder)"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\WinSDK-NetFx40Tools-x86@InstallationFolder)"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0\\WinSDKNetFx35Tools@InstallationFolder)"
"WindowsSDK80Path"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0@InstallationFolder)"
私のレジストリの元のキーは次のとおりです。
[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\\v7.0A@InstallationFolder)"
"MSBuildRuntimeVersion"="4.0.30319"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0A\\WinSDK-NetFx40Tools-x86@InstallationFolder)"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0A\\WinSDK-NetFx35Tools-x86@InstallationFolder)"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\MSBuild\\ToolsVersions\\4.0@MSBuildToolsPath)"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\11.0]
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A@InstallationFolder)"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\WinSDK-NetFx40Tools-x86@InstallationFolder)"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0A\\WinSDK-NetFx35Tools-x86@InstallationFolder)"
"WindowsSDK80Path"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v8.0@InstallationFolder)"
レジストリキーをエクスポートし、編集してファイルを実行し、キーを修正しました。Wow6432Node
レジストリについても同じことをしました。
元のレジストリに次の問題がありました (VS2012 と Windows SDK 7.0 をインストールした後の状態である必要があります)。
- キーの
FrameworkSDKRoot
値は、ToolsVersions\4.0
Windows SDK 7.0A (VS2010 に付属するもの) のキーを参照していますが、このバージョンは私のマシンにはインストールされていません。
SDK40ToolsPath
との値についても同じことが言えSDK35ToolsPath
ます。
- キーの
SDK35ToolsPath
値は、存在しなかった を参照しています。ToolsVersions\4.0\11.0
WinSDK-NetFx35Tools-x86
- の、または
Wow6432Node
のすべてが正しくありませんでした (存在しないレジストリ値を参照しています)。FrameworkSDKRoot
SDK35ToolsPath
SDK40ToolsPath
レジストリを編集すると問題は解決しますが、コストが高くなります。この変更をすべての開発用コンピューター/ビルド サーバーに適用する必要があります。