我有一个调试转储(可在http://1drv.ms/1CpYkmr获得),这给了我非常奇怪的输出.我尝试做标准的WinDBG并没有任何用处,所以我尝试了PDE.dll并获得了以下内容:
=========================================================================================
PDE v9.5 - Copyright 2014 Andrew Richards
=========================================================================================
Start memory scan : 0x0552e634 ($csp)
End memory scan : 0x05530000 (User Stack Base)
0x0552e648 : 0x066dd578 : !dse combase!STOWED_EXCEPTION_INFORMATION_V1
0x0552e650 : 0x066dd578 : !dse combase!STOWED_EXCEPTION_INFORMATION_V1
0x0552e694 : 0x066dd578 : !dse combase!STOWED_EXCEPTION_INFORMATION_V1
0x0552e6ec : 0x066dd578 : !dse combase!STOWED_EXCEPTION_INFORMATION_V1
*** WARNING: Unable to verify checksum for System.Core.ni.dll
0:004> !PDE.dse
Stowed Exception Array @ 0x066dd578
Stowed Exception #1 @ 0x06728600
0x80004003 (FACILITY_NULL - Default): E_POINTER - Pointer that …Run Code Online (Sandbox Code Playgroud) 我有以下设置(为了简洁,删除了无趣的XML):
MyProject.fsproj
<Project ...>
<Import Project="MyTask.props" />
...
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
MyTask.props
<Project ...>
<UsingTask XXX.UpdateAssemblyInfo />
<Target Name="UpdateAssemblyInfo"
BeforeTargets="CoreCompile">
<UpdateAssemblyInfo ...>
<Output
TaskParameter="AssemblyInfoTempFilePath"
PropertyName="AssemblyInfoTempFilePath" />
</UpdateAssemblyInfo>
<ItemGroup>
<Compile Include="$(AssemblyInfoTempFilePath)" />
</ItemGroup>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
问题在于MyTask.props添加的ItemGroup是最后添加的,尽管它是在项目的最开始时导入的.我假设这是因为ItemGroup实际上并未导入 - 它是在运行任务时添加的.
这在F#中不是一件好事,因为文件顺序很重要 - 包括构建列表末尾的文件意味着构建EXE是不可能的(例如,入口点必须在最后一个文件中).
因此我的问题是 - 有没有办法让我输出一个ItemGroup作为Target的一部分,并将生成的ItemGroup作为第一个?