从 TFS2010 迁移到 TFS2012 时 System.Drawing V4 的 FileNotFoundException。异常代码 0xE0434F4D
FileNotFoundException for System.Drawing V4 when migrating from TFS2010 to TFS2012. Exception Code 0xE0434F4D
我有一个在 VS2005 .Net 2 中开发的大型解决方案。我们从 TFS2010 迁移到 TFS2012(保持框架为 .Net v2)。在 IDE、构建和安装中一切正常,但是当程序执行时,得到以下问题签名:
Problem Event Name: CLR20r3
Problem Signature 01: myProgram.exe
Problem Signature 02: 1.0.0.5
Problem Signature 03: 550f8264
Problem Signature 04: mscorlib
Problem Signature 05: 2.0.0.0
Problem Signature 06: 53a12268
Problem Signature 07: f15
Problem Signature 08: 3
Problem Signature 09: System.IO.FileNotFoundException
OS Version: 6.1.7601.2.1.0.256.48
Locale ID: 2057
TFS2010 构建服务器是 Windows XP SP3 x86。
TFS2012 构建服务器是 Windows Server 2008 R2 x64.
我已将框架迁移到 .Net 4 并且一切正常,但不幸的是有些客户需要 .Net 2。
使用 WinDbg 给了我以下内容:
Problem Signature 04 gives us where the error originated, mscorlib.
Problem Signature 07 gives us the methodDef, which we can use to get the methodDesc “702b8c10” => “System.RuntimeTypeHandle.GetTypeByName(String.String, Boolean, Boolean, Boolean, System.Threading.StackCrawlMark ByRef)”
Problem Signature 08 gives us the Offset so when I do a dump of the IL, I get “ldarg.0” at offset 3.
据我所知,System.RuntimeTypeHandle.GetTypeByName 的参数 1 即字符串为 0,因此出现 FileNotFound 异常,但它没有告诉我文件名。
- 使用 FusionLog 给了我以下内容:
它成功加载了 System.Drawing v2,但随后也尝试加载失败的 v4(我检查过 none 的项目引用了任何 .Net v4 程序集)。
** Assembly Binder Log Entry (30/03/2015 @ 14:45:05) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable C:\Program Files\Common Files\myProgram\myProgram.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = HOST1\Administrator
LOG: DisplayName = System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(Fully-specified)
LOG: Appbase = file:///C:/Program Files/Common Files/myProgram/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = myProgram.exe
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing/System.Drawing.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing/System.Drawing.EXE.
LOG: All probing URLs attempted and failed.
以下是 Procmon 的摘录:
CreateFile C:\Windows\assembly\GAC_32\myProgram.resources.0.0.5_en_0a4a2ad97614f98d PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC_MSIL\myProgram.resources.0.0.5_en_0a4a2ad97614f98d PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC\myProgram.resources.0.0.5_en_0a4a2ad97614f98d PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources.dll PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources\myProgram.resources.dll PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources.exe PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources\myProgram.resources.exe PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC_32\System.Drawing.0.0.0__b03f5f7f11d50a3a PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC_MSIL\System.Drawing.0.0.0__b03f5f7f11d50a3a NAME NOT FOUND
CreateFile C:\Windows\assembly\GAC\System.Drawing.0.0.0__b03f5f7f11d50a3a PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing.dll NAME NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing\System.Drawing.dll PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing.exe NAME NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing\System.Drawing.exe PATH NOT FOUND
如您所见,它尝试加载 myProgram.resources.dll 但失败,然后尝试加载 Framework v4 文件,这让我查看了资源文件。
mscorlib.resources.dll 由 .Net 和 Silverlight 的语言包安装。尝试安装 Silverlight,因为我们的 TFS2010 构建服务器有这个,但没有成功。
[这篇文章]:"Could not load file or assembly System.Drawing or one of its dependencies" error on .Net 2.0, VS2010 and Windows 8说System.Drawing错误是由于VS中的资源文件错误。
我已经尝试了建议的解决方案:
编辑图像流的第一行:AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w TO AAEAAAD/////AQAAAAAAAAAAMAAgAAAFdTeXN0ZW0uV2luZG93cyLMCyAuV2Gb3JtcywgVmVyc2lvbj00LjAuMC4w
None 我的解决方案中的资源文件在图像流中有错误的顶行 "j00LjAuMC4w"
还检查了 4.0.0.0 版本的所有 .resx 文件,但它们都是 2.0.0.0
- 这是崩溃迷你转储:
转储摘要
Dump File: WER6229.tmp.mdmp : C:\Users\Administrator\AppData\Local\Temp\WER6229.tmp.mdmp
Last Write Time: 16/04/2015 10:46:17
Process Name: myProgram.exe : C:\Program Files (x86)\Common Files\myProgram\myProgram.exe
Process Architecture: x86
Exception Code: 0xE0434F4D
Exception Information: An exception came from the CLR
Heap Information: Not Present
System Information
------------------
OS Version: 6.1.7601
CLR Version(s): 2.0.50727.5485
Modules
-------
Module Name Module Path Module Version
----------- ----------- --------------
myProgram.exe C:\Program Files (x86)\Common Files\myProgram\myProgram.exe 1.4.2015.12
ntdll.dll C:\Windows\SysWOW64\ntdll.dll 6.1.7601.18247
mscoree.dll C:\Windows\System32\mscoree.dll 4.0.40305.0
kernel32.dll C:\Windows\SysWOW64\kernel32.dll 6.1.7601.18409
KERNELBASE.dll C:\Windows\SysWOW64\KERNELBASE.dll 6.1.7601.18409
advapi32.dll C:\Windows\SysWOW64\advapi32.dll 6.1.7601.18247
msvcrt.dll C:\Windows\SysWOW64\msvcrt.dll 7.0.7601.17744
sechost.dll C:\Windows\SysWOW64\sechost.dll 6.1.7600.16385
rpcrt4.dll C:\Windows\SysWOW64\rpcrt4.dll 6.1.7601.18532
sspicli.dll C:\Windows\SysWOW64\sspicli.dll 6.1.7601.18719
CRYPTBASE.dll C:\Windows\SysWOW64\CRYPTBASE.dll 6.1.7600.16385
mscoreei.dll C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll 4.0.30319.18408
shlwapi.dll C:\Windows\SysWOW64\shlwapi.dll 6.1.7601.17514
gdi32.dll C:\Windows\SysWOW64\gdi32.dll 6.1.7601.18577
user32.dll C:\Windows\SysWOW64\user32.dll 6.1.7601.17514
lpk.dll C:\Windows\SysWOW64\lpk.dll 6.1.7601.18177
usp10.dll C:\Windows\SysWOW64\usp10.dll 1.626.7601.18454
imm32.dll C:\Windows\System32\imm32.dll 6.1.7601.17514
msctf.dll C:\Windows\SysWOW64\msctf.dll 6.1.7600.16385
mscorwks.dll C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 2.0.50727.5485
msvcr80.dll C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6229_none_d089f796442de10e\msvcr80.dll 8.0.50727.6229
shell32.dll C:\Windows\SysWOW64\shell32.dll 6.1.7601.18429
ole32.dll C:\Windows\SysWOW64\ole32.dll 6.1.7601.17514
profapi.dll C:\Windows\SysWOW64\profapi.dll 6.1.7600.16385
mscorlib.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\mscorlibbf604432e1a30c954b2ee40d6a2d1c\mscorlib.ni.dll 2.0.50727.5485
mscorsec.dll C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorsec.dll 2.0.50727.5483
wintrust.dll C:\Windows\SysWOW64\wintrust.dll 6.1.7601.18205
crypt32.dll C:\Windows\SysWOW64\crypt32.dll 6.1.7601.18277
msasn1.dll C:\Windows\SysWOW64\msasn1.dll 6.1.7601.17514
comctl32.dll C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18201_none_ec80f00e8593ece5\comctl32.dll 5.82.7601.18201
cryptsp.dll C:\Windows\System32\cryptsp.dll 6.1.7600.16385
rsaenh.dll C:\Windows\System32\rsaenh.dll 6.1.7600.16385
imagehlp.dll C:\Windows\SysWOW64\imagehlp.dll 6.1.7601.18288
ncrypt.dll C:\Windows\System32\ncrypt.dll 6.1.7601.18714
bcrypt.dll C:\Windows\System32\bcrypt.dll 6.1.7600.16385
bcryptprimitives.dll C:\Windows\SysWOW64\bcryptprimitives.dll 6.1.7600.16385
userenv.dll C:\Windows\SysWOW64\userenv.dll 6.1.7601.17514
gpapi.dll C:\Windows\System32\gpapi.dll 6.1.7601.18711
cryptnet.dll C:\Windows\System32\cryptnet.dll 6.1.7601.18205
Wldap32.dll C:\Windows\SysWOW64\Wldap32.dll 6.1.7601.17514
SensApi.dll C:\Windows\System32\SensApi.dll 6.1.7600.16385
uxtheme.dll C:\Windows\System32\uxtheme.dll 6.1.7600.16385
mscorjit.dll C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll 2.0.50727.5467
myProgram.Engine.dll C:\Windows\assembly\GAC_MSIL\myProgram.Engine.0.0.5__0a4a2ad97614f98d\myProgram.Engine.dll 1.4.2015.12
System.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\System8ba9e296e92b4e14bdc2437edac603\System.ni.dll 2.0.50727.5485
System.Drawing.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Drawing6e10dfd0811b303553216f5cb092ef\System.Drawing.ni.dll 2.0.50727.5483
System.Windows.Forms.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Windows.Forms53d9e9a4989833ef3db4b22549ba1a\System.Windows.Forms.ni.dll 2.0.50727.5483
myProgram.Designer.dll C:\Windows\assembly\GAC_MSIL\myProgram.Designer.0.0.5__0a4a2ad97614f98d\myProgram.Designer.dll 1.4.2015.12
myProgram.UI.dll C:\Windows\assembly\GAC_MSIL\myProgram.UI.0.0.5__0a4a2ad97614f98d\myProgram.UI.dll 1.4.2015.12
DevComponents.DotNetBar.dll C:\Windows\assembly\GAC\DevComponents.DotNetBar.8.0.0__7eb7c3a35b91de04\DevComponents.DotNetBar.dll 5.8.0.0
version.dll C:\Windows\System32\version.dll 6.1.7600.16385
apphelp.dll C:\Windows\System32\apphelp.dll 6.1.7601.17514
迷你故障转储给了我异常代码 0xE0434F4D。
- 尝试过[这个想法][program name].exe has stopped working 运行 myProgram 作为管理员但没有帮助。
[This blog]http://blog.toxa.de/archives/38(也处理 .Net 2)让我想到从 SplashScreen 中删除图标。这会影响引发的错误。使用 continue 选项会出现 3 个错误,而不是如上所述出现 1 个错误。
- 来自构建日志:
我看到使用了 Framework v4 的 MSBuild
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /nologo /noconsolelogger "F:\Builds\Platform\myProject_BugFixing_CI\BuildType\TFSBuild.proj" /m:1 /nr:False "@F:\Builds\Platform\myProject_BugFixing_CI\BuildType\TfsBuild.rsp"
已尝试在每个项目文件中添加 Set ToolsVersion = 2.0 和 TargetFrameworkVersion = v2.0,并在 TFSBuild.proj 中添加 ToolsVersion="2.0"。
运行 来自命令行的 Framework v2 MSBuild:
- None 开关 (/m:1 /nr:False "@F:\Builds\Platform\myProgram_BugFixing_CI\BuildType\TfsBuild.rsp") 被识别。
- 删除这些后,构建在 TFSBuild.proj 的第 7 行失败,因为无法识别 SolutionRoot。
- 如果我对此进行硬编码,则 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets 上的构建将失败,第 359 行也引用了 SolutionRoot。它说在命名空间中有一个无效的子元素 _SolutionRoot。
我认为 MSBuild v4 是正确的版本,TFS2010 构建服务器也必须使用它。
- TFS Build.log 揭示了构建中使用的不同 ResGen 版本:
我用 TFS2010 构建服务器 exe 替换了 TFS2012 构建服务器 ResGen,运行 构建成功,没有任何区别。
TFS2010 – Path of ResGen used: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\ResGen.exe
This is v3.5.30729.4507 and dated 19/03/2010
TFS2012 – Path of ResGen used: C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\bin\Resgen.exe
This is v2.0.50727.42 and dated 23/09/2005
[这个post]MSBuild cant find resgen.exe建议设置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\CurrentVersion
与
中的设置 ProductionVersion 相同的值
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A
它是 v8,但这没有用。
- 在 myProgram.exe(两个版本)上使用 IlSpy 反编译代码显示两个树结构,其中反编译的 .cs 文件相同,但二进制 .resource 文件不同(大小和内容)。
特别是二进制编辑显示 mainform.resources 的尾部是行(当然还有其他差异):
System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d
在旧的 TFS2010 exe 中,vs
System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
在新的 TFS2012 exe 中。
这意味着新版本正在使用 .Net 4 二进制序列化;旧版本正在使用 .Net 2 二进制序列化。
ResGen 的快速反编译表明它是一个非常简单的程序:
- 解析参数
- 从 .resx 文件读取资源
- 使用二进制资源写入器写入输出文件
我怀疑这两个版本非常相似,因为应该没有真正需要更改(实际上都标记为 .net2/AnyCPU)。
更有趣的是,使用的二进制序列化程序来自 mscorlib,因此新版本必须使用 .Net 4 mscorlib
(但是构建日志说它是 v2
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll
FusionName = mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
) 尽管 ResGen 实际上是一个 .Net 2 二进制文件——这可以解释为什么覆盖上面第 7 点中尝试的 ResGen.exe 版本没有效果。
通过更改 TFS2012 构建服务器解决:
Windows 服务器 2008 R2 x64 => Windows 7 x86
我有一个在 VS2005 .Net 2 中开发的大型解决方案。我们从 TFS2010 迁移到 TFS2012(保持框架为 .Net v2)。在 IDE、构建和安装中一切正常,但是当程序执行时,得到以下问题签名:
Problem Event Name: CLR20r3
Problem Signature 01: myProgram.exe
Problem Signature 02: 1.0.0.5
Problem Signature 03: 550f8264
Problem Signature 04: mscorlib
Problem Signature 05: 2.0.0.0
Problem Signature 06: 53a12268
Problem Signature 07: f15
Problem Signature 08: 3
Problem Signature 09: System.IO.FileNotFoundException
OS Version: 6.1.7601.2.1.0.256.48
Locale ID: 2057
TFS2010 构建服务器是 Windows XP SP3 x86。
TFS2012 构建服务器是 Windows Server 2008 R2 x64.
我已将框架迁移到 .Net 4 并且一切正常,但不幸的是有些客户需要 .Net 2。
使用 WinDbg 给了我以下内容:
Problem Signature 04 gives us where the error originated, mscorlib. Problem Signature 07 gives us the methodDef, which we can use to get the methodDesc “702b8c10” => “System.RuntimeTypeHandle.GetTypeByName(String.String, Boolean, Boolean, Boolean, System.Threading.StackCrawlMark ByRef)” Problem Signature 08 gives us the Offset so when I do a dump of the IL, I get “ldarg.0” at offset 3.
据我所知,System.RuntimeTypeHandle.GetTypeByName 的参数 1 即字符串为 0,因此出现 FileNotFound 异常,但它没有告诉我文件名。
- 使用 FusionLog 给了我以下内容:
它成功加载了 System.Drawing v2,但随后也尝试加载失败的 v4(我检查过 none 的项目引用了任何 .Net v4 程序集)。
** Assembly Binder Log Entry (30/03/2015 @ 14:45:05) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable C:\Program Files\Common Files\myProgram\myProgram.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = HOST1\Administrator
LOG: DisplayName = System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
(Fully-specified)
LOG: Appbase = file:///C:/Program Files/Common Files/myProgram/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = myProgram.exe
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing/System.Drawing.DLL.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing.EXE.
LOG: Attempting download of new URL file:///C:/Program Files/Common Files/myProgram/System.Drawing/System.Drawing.EXE.
LOG: All probing URLs attempted and failed.
以下是 Procmon 的摘录:
CreateFile C:\Windows\assembly\GAC_32\myProgram.resources.0.0.5_en_0a4a2ad97614f98d PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC_MSIL\myProgram.resources.0.0.5_en_0a4a2ad97614f98d PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC\myProgram.resources.0.0.5_en_0a4a2ad97614f98d PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources.dll PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources\myProgram.resources.dll PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources.exe PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\en\myProgram.resources\myProgram.resources.exe PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC_32\System.Drawing.0.0.0__b03f5f7f11d50a3a PATH NOT FOUND
CreateFile C:\Windows\assembly\GAC_MSIL\System.Drawing.0.0.0__b03f5f7f11d50a3a NAME NOT FOUND
CreateFile C:\Windows\assembly\GAC\System.Drawing.0.0.0__b03f5f7f11d50a3a PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing.dll NAME NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing\System.Drawing.dll PATH NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing.exe NAME NOT FOUND
CreateFile C:\Program Files\Common Files\myProgram\System.Drawing\System.Drawing.exe PATH NOT FOUND
如您所见,它尝试加载 myProgram.resources.dll 但失败,然后尝试加载 Framework v4 文件,这让我查看了资源文件。
mscorlib.resources.dll 由 .Net 和 Silverlight 的语言包安装。尝试安装 Silverlight,因为我们的 TFS2010 构建服务器有这个,但没有成功。
[这篇文章]:"Could not load file or assembly System.Drawing or one of its dependencies" error on .Net 2.0, VS2010 and Windows 8说System.Drawing错误是由于VS中的资源文件错误。 我已经尝试了建议的解决方案:
编辑图像流的第一行:AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w TO AAEAAAD/////AQAAAAAAAAAAMAAgAAAFdTeXN0ZW0uV2luZG93cyLMCyAuV2Gb3JtcywgVmVyc2lvbj00LjAuMC4w None 我的解决方案中的资源文件在图像流中有错误的顶行 "j00LjAuMC4w"
还检查了 4.0.0.0 版本的所有 .resx 文件,但它们都是 2.0.0.0
- 这是崩溃迷你转储:
转储摘要
Dump File: WER6229.tmp.mdmp : C:\Users\Administrator\AppData\Local\Temp\WER6229.tmp.mdmp
Last Write Time: 16/04/2015 10:46:17
Process Name: myProgram.exe : C:\Program Files (x86)\Common Files\myProgram\myProgram.exe
Process Architecture: x86
Exception Code: 0xE0434F4D
Exception Information: An exception came from the CLR
Heap Information: Not Present
System Information
------------------
OS Version: 6.1.7601
CLR Version(s): 2.0.50727.5485
Modules
-------
Module Name Module Path Module Version
----------- ----------- --------------
myProgram.exe C:\Program Files (x86)\Common Files\myProgram\myProgram.exe 1.4.2015.12
ntdll.dll C:\Windows\SysWOW64\ntdll.dll 6.1.7601.18247
mscoree.dll C:\Windows\System32\mscoree.dll 4.0.40305.0
kernel32.dll C:\Windows\SysWOW64\kernel32.dll 6.1.7601.18409
KERNELBASE.dll C:\Windows\SysWOW64\KERNELBASE.dll 6.1.7601.18409
advapi32.dll C:\Windows\SysWOW64\advapi32.dll 6.1.7601.18247
msvcrt.dll C:\Windows\SysWOW64\msvcrt.dll 7.0.7601.17744
sechost.dll C:\Windows\SysWOW64\sechost.dll 6.1.7600.16385
rpcrt4.dll C:\Windows\SysWOW64\rpcrt4.dll 6.1.7601.18532
sspicli.dll C:\Windows\SysWOW64\sspicli.dll 6.1.7601.18719
CRYPTBASE.dll C:\Windows\SysWOW64\CRYPTBASE.dll 6.1.7600.16385
mscoreei.dll C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll 4.0.30319.18408
shlwapi.dll C:\Windows\SysWOW64\shlwapi.dll 6.1.7601.17514
gdi32.dll C:\Windows\SysWOW64\gdi32.dll 6.1.7601.18577
user32.dll C:\Windows\SysWOW64\user32.dll 6.1.7601.17514
lpk.dll C:\Windows\SysWOW64\lpk.dll 6.1.7601.18177
usp10.dll C:\Windows\SysWOW64\usp10.dll 1.626.7601.18454
imm32.dll C:\Windows\System32\imm32.dll 6.1.7601.17514
msctf.dll C:\Windows\SysWOW64\msctf.dll 6.1.7600.16385
mscorwks.dll C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 2.0.50727.5485
msvcr80.dll C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.6229_none_d089f796442de10e\msvcr80.dll 8.0.50727.6229
shell32.dll C:\Windows\SysWOW64\shell32.dll 6.1.7601.18429
ole32.dll C:\Windows\SysWOW64\ole32.dll 6.1.7601.17514
profapi.dll C:\Windows\SysWOW64\profapi.dll 6.1.7600.16385
mscorlib.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\mscorlibbf604432e1a30c954b2ee40d6a2d1c\mscorlib.ni.dll 2.0.50727.5485
mscorsec.dll C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorsec.dll 2.0.50727.5483
wintrust.dll C:\Windows\SysWOW64\wintrust.dll 6.1.7601.18205
crypt32.dll C:\Windows\SysWOW64\crypt32.dll 6.1.7601.18277
msasn1.dll C:\Windows\SysWOW64\msasn1.dll 6.1.7601.17514
comctl32.dll C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.7601.18201_none_ec80f00e8593ece5\comctl32.dll 5.82.7601.18201
cryptsp.dll C:\Windows\System32\cryptsp.dll 6.1.7600.16385
rsaenh.dll C:\Windows\System32\rsaenh.dll 6.1.7600.16385
imagehlp.dll C:\Windows\SysWOW64\imagehlp.dll 6.1.7601.18288
ncrypt.dll C:\Windows\System32\ncrypt.dll 6.1.7601.18714
bcrypt.dll C:\Windows\System32\bcrypt.dll 6.1.7600.16385
bcryptprimitives.dll C:\Windows\SysWOW64\bcryptprimitives.dll 6.1.7600.16385
userenv.dll C:\Windows\SysWOW64\userenv.dll 6.1.7601.17514
gpapi.dll C:\Windows\System32\gpapi.dll 6.1.7601.18711
cryptnet.dll C:\Windows\System32\cryptnet.dll 6.1.7601.18205
Wldap32.dll C:\Windows\SysWOW64\Wldap32.dll 6.1.7601.17514
SensApi.dll C:\Windows\System32\SensApi.dll 6.1.7600.16385
uxtheme.dll C:\Windows\System32\uxtheme.dll 6.1.7600.16385
mscorjit.dll C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll 2.0.50727.5467
myProgram.Engine.dll C:\Windows\assembly\GAC_MSIL\myProgram.Engine.0.0.5__0a4a2ad97614f98d\myProgram.Engine.dll 1.4.2015.12
System.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\System8ba9e296e92b4e14bdc2437edac603\System.ni.dll 2.0.50727.5485
System.Drawing.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Drawing6e10dfd0811b303553216f5cb092ef\System.Drawing.ni.dll 2.0.50727.5483
System.Windows.Forms.ni.dll C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Windows.Forms53d9e9a4989833ef3db4b22549ba1a\System.Windows.Forms.ni.dll 2.0.50727.5483
myProgram.Designer.dll C:\Windows\assembly\GAC_MSIL\myProgram.Designer.0.0.5__0a4a2ad97614f98d\myProgram.Designer.dll 1.4.2015.12
myProgram.UI.dll C:\Windows\assembly\GAC_MSIL\myProgram.UI.0.0.5__0a4a2ad97614f98d\myProgram.UI.dll 1.4.2015.12
DevComponents.DotNetBar.dll C:\Windows\assembly\GAC\DevComponents.DotNetBar.8.0.0__7eb7c3a35b91de04\DevComponents.DotNetBar.dll 5.8.0.0
version.dll C:\Windows\System32\version.dll 6.1.7600.16385
apphelp.dll C:\Windows\System32\apphelp.dll 6.1.7601.17514
迷你故障转储给了我异常代码 0xE0434F4D。
- 尝试过[这个想法][program name].exe has stopped working 运行 myProgram 作为管理员但没有帮助。
[This blog]http://blog.toxa.de/archives/38(也处理 .Net 2)让我想到从 SplashScreen 中删除图标。这会影响引发的错误。使用 continue 选项会出现 3 个错误,而不是如上所述出现 1 个错误。
- 来自构建日志:
我看到使用了 Framework v4 的 MSBuild
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /nologo /noconsolelogger "F:\Builds\Platform\myProject_BugFixing_CI\BuildType\TFSBuild.proj" /m:1 /nr:False "@F:\Builds\Platform\myProject_BugFixing_CI\BuildType\TfsBuild.rsp"
已尝试在每个项目文件中添加 Set ToolsVersion = 2.0 和 TargetFrameworkVersion = v2.0,并在 TFSBuild.proj 中添加 ToolsVersion="2.0"。
运行 来自命令行的 Framework v2 MSBuild:
- None 开关 (/m:1 /nr:False "@F:\Builds\Platform\myProgram_BugFixing_CI\BuildType\TfsBuild.rsp") 被识别。
- 删除这些后,构建在 TFSBuild.proj 的第 7 行失败,因为无法识别 SolutionRoot。
- 如果我对此进行硬编码,则 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets 上的构建将失败,第 359 行也引用了 SolutionRoot。它说在命名空间中有一个无效的子元素 _SolutionRoot。
我认为 MSBuild v4 是正确的版本,TFS2010 构建服务器也必须使用它。
- TFS Build.log 揭示了构建中使用的不同 ResGen 版本:
我用 TFS2010 构建服务器 exe 替换了 TFS2012 构建服务器 ResGen,运行 构建成功,没有任何区别。
TFS2010 – Path of ResGen used: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\ResGen.exe
This is v3.5.30729.4507 and dated 19/03/2010
TFS2012 – Path of ResGen used: C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\bin\Resgen.exe
This is v2.0.50727.42 and dated 23/09/2005
[这个post]MSBuild cant find resgen.exe建议设置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\CurrentVersion
与
中的设置 ProductionVersion 相同的值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A
它是 v8,但这没有用。
- 在 myProgram.exe(两个版本)上使用 IlSpy 反编译代码显示两个树结构,其中反编译的 .cs 文件相同,但二进制 .resource 文件不同(大小和内容)。
特别是二进制编辑显示 mainform.resources 的尾部是行(当然还有其他差异):
System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d
在旧的 TFS2010 exe 中,vs
System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
在新的 TFS2012 exe 中。 这意味着新版本正在使用 .Net 4 二进制序列化;旧版本正在使用 .Net 2 二进制序列化。
ResGen 的快速反编译表明它是一个非常简单的程序:
- 解析参数
- 从 .resx 文件读取资源
- 使用二进制资源写入器写入输出文件
我怀疑这两个版本非常相似,因为应该没有真正需要更改(实际上都标记为 .net2/AnyCPU)。
更有趣的是,使用的二进制序列化程序来自 mscorlib,因此新版本必须使用 .Net 4 mscorlib (但是构建日志说它是 v2
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll
FusionName = mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
) 尽管 ResGen 实际上是一个 .Net 2 二进制文件——这可以解释为什么覆盖上面第 7 点中尝试的 ResGen.exe 版本没有效果。
通过更改 TFS2012 构建服务器解决: Windows 服务器 2008 R2 x64 => Windows 7 x86