自从我的项目升级到VS2010,包括使用MSBuild v4而不是3.5(并且没有进行任何其他更改),我得到以下构建错误,并且不知道如何修复它(从CC.NET登录):
<target name="ResolveComReferences" success="false">
<message level="high"><![CDATA[C:\Programme\Microsoft SDKs\Windows\v7.0A\bin\TlbImp.exe c:\Assemblies\NMSDVDXU.dll /namespace:NMSDVDXLib /machine:X64 /out:obj\x64\Release\Interop.NMSDVDXLib.dll /sysarray /transform:DispRet /reference:c:\Assemblies\Bass.Net.dll /reference:c:\Assemblies\LogicNP.FileView.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Management.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:C:\WINDOWS\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll ]]></message>
<error code="TI0000" file="TlbImp"><![CDATA[A single valid machine type compatible with the input type library must be specified.]]></error>
<warning code="MSB3283" file="C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets" line="1558" column="9"><![CDATA[Die Wrapperassembly für die Typbibliothek "NMSDVDXLib" wurde nicht gefunden.]]></warning>
<message level="high"><![CDATA[C:\Programme\Microsoft SDKs\Windows\v7.0A\bin\TlbImp.exe c:\Assemblies\StarBurnX12.dll /namespace:RocketDivision.StarBurnX /machine:X64 /out:obj\x64\Release\Interop.RocketDivision.StarBurnX.dll /sysarray /transform:DispRet /reference:c:\Assemblies\Bass.Net.dll /reference:c:\Assemblies\LogicNP.FileView.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Management.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:C:\WINDOWS\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll ]]></message>
<error code="TI0000" file="TlbImp"><
在HTML中我想要的将转换为:
<table height="100%">
<tr>
<td><input type="text"></td>
</tr>
<tr height="100%">
<td>
<!-- Uses as much space as it gets, but scrolls if text inside
gets too large. Makes outer window scroll if too small …Run Code Online (Sandbox Code Playgroud) 我们的应用程序(用C++,VS 2010项目编写)在Windows 8之前的所有操作系统上运行良好(现在仍然如此).但是,在Windows 8上,当有序退出应用程序时,会发生访问冲突:
mfc100.dll!_DllMain@12() <<< Crash here
mfc100.dll!__CRT_INIT@12()
mfc100.dll!__DllMainCRTStartup@12()
ntdll.dll!_LdrxCallInitRoutine@16()
ntdll.dll!LdrpCallInitRoutine()
ntdll.dll!LdrShutdownProcess()
ntdll.dll!RtlExitUserProcess()
kernel32.dll!_ExitProcessImplementation@4()
mscoreei.dll!RuntimeDesc::ShutdownAllActiveRuntimes(unsigned int,class RuntimeDesc *,enum RuntimeDesc::ShutdownCompatMode)
mscoreei.dll!_CorExitProcess@4()
mscoree.dll!_ShellShim_CorExitProcess@4()
msvcr100d.dll!__crtCorExitProcess(int status) line693 C
msvcr100d.dll!__crtExitProcess(int status) line 699 C
msvcr100d.dll!doexit(int code, int quick, int retcaller) line 621 C
msvcr100d.dll!exit(int code) Zeile 393 C
my.exe!__tmainCRTStartup() Zeile 568 C
my.exe!WinMainCRTStartup() Zeile 371 C
kernel32.dll!@BaseThreadInitThunk@12()
ntdll.dll!__RtlUserThreadStart()
ntdll.dll!__RtlUserThreadStart@8()
Run Code Online (Sandbox Code Playgroud)
在MSDN论坛主题中,建议GC.Collect()在退出之前运行,但是在退出之前不久我就不能对这样的调用产生任何影响.
关于如何调试问题,我有点不知所措.据我所知,CorExitProcess负责清理应用程序的托管资源.那么这可能是托管组件中的错误吗?
或者是否更有可能某些函数指针_DllMain被覆盖/损坏?如果是这样,我如何在相关地址设置数据断点?有一篇文章解释了如何调试类似的问题,但是他在自己的DLL中遇到了这个问题,所以他实际上可以找到问题的确切来源,而我却无法解决.
有什么建议?
编辑:其他信息,windbg !analyze -v:
FAULTING_IP:
mfc100+258e6c
64298e6c 8b4654 mov eax,dword …Run Code Online (Sandbox Code Playgroud) 我已将这种方法用于我的类中定义的两个属性。属性是
public bool HasImage { get; set; }
public DateTimeOffset? StartDate { get; set; }
public override string ToString()
{
string value = "";
if (StartDate.HasValue)
{
if (StartDate == DateTime.Today.Date)
value = "1 Day";
else if (StartDate < DateTime.Today.Date)
value = "Past Due";
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
如何对HasImage属性使用这个方法,这里我无法删除StartDate属性的方法。将结果导出到excel时会调用以上方法。
我们目前面临的问题是,在使用Windows文件打开/保存对话框时加载了一个外部组件(我们遗憾地不知道哪一个),有些系统可能会通过调用来更改进程的语言环境setlocale(LC_ALL, "").
这会混淆我们的应用程序,因为它依赖于所设置的标准语言环境(在运行时期间我们自己的任何组件都不会更改).
因此,我们需要确保setlocale()在进程内调用时从未产生任何影响,或者我们需要在调用此函数时检测,然后将语言环境重置为默认的"C"语言环境.
有没有办法实现这些目标?
我有以下ResourceDictionary(缩短):
<ResourceDictionary>
<Fluent:RibbonContextualTabGroup Header="Dokument" x:Key="dokumentRibbonGroup" x:Name="dokumentRibbonGroup" />
<Fluent:RibbonTabItem x:Key="dokumentRibbonTab" Header="Start" />
<Fluent:RibbonTabItem x:Key="ueberpruefenRibbonTab" Header="Überprüfen" />
<Fluent:RibbonTabItem x:Key="austauschRibbonTab" Header="Austausch" />
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
当我访问Keys字典的属性时,键按以下顺序:
dokumentRibbonTab austauschRibbonTab ueberpruefenRibbonTab dokumentRibbonGroup
我无法理解那个顺序.它不是按字母顺序排列的,不是修订版,尤其不是原始订单.有人有提示吗?或者甚至更好,关于如何指定项目顺序的建议ResourceDictionary?