我有一个大型的Web应用程序项目,包括C#,C ++和C中的代码,有许多引用(项目引用,DLL引用),我正在进行发布构建。在虚拟机中测试我的程序我收到以下错误:
Could not load file or assembly <MyAssembly.DLL> or one of its dependencies.
The application has failed to start because its side-by-side configuration is incorrect.
Please see the application event log or use the command-line sxstrace.exe tool for more detail.
所以我检查了事件日志,我发现了这个:
Activation context generation failed for "C:\Windows\Microsoft.NET\Framework\...\MyAssembly.DLL".
Dependent Assembly Microsoft.VC90.DebugCRT,processorArchitecture="x86",
publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
could not be found. Please use sxstrace.exe for detailed diagnosis.
我也按照建议使用了sxstrace,最后得到的文件是:
ERROR: Cannot resolve reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",
publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
我检查了我的项目的配置,并且它们都已设置为在发布版本中构建。为什么MyAssembly引用Microsoft.VC90.DebugCRT?我该如何解决?
请注意,我在我的虚拟机上安装了x86和x64 MSVC ++可再发行组件。
修改 我还在MyAssembly.dll上运行了依赖walker,我得到了一堆条目,说“Error opening file。系统无法找到指定的文件”:
API-MS-WIN-... (4x)
EXT-MS-WIN-...
MSVCM90D.DLL
MSVCR90.DLL
MSVCR90D.DLL
IESHIMS.DLL
MFPLAT.DLL
SETTINGSYNPOLICY.DLL
WLANAPI.DLL
答案 0 :(得分:1)
正如一些评论中所提到的,解决方案是使用依赖性walker。
实际上,即使我在Visual Studio中选择了Release,MyAssembly.dll也是使用Debug配置构建的。原因是我正在运行一个在目标WebPublish上调用msbuild的post-build事件,但它没有明确指定Release配置,所以它决定使用Debug。