我试图将自定义任务集成到我的ASP.Net应用程序中。添加完任务后,resx
文件中没有任何文件包含在构建中,导致事情失败。
以下是工作版本的顺序,只有很少的csproj修改:
CoreResGen
PreComputeCompileTypeScript
CompileTypeScript
GenerateTargetFrameworkMonikerAttribute
CoreCompile
_CopyFilesMarkedCopyLocal
GetTypeScriptCopyToOutputDirectoryItems
_CopyOutOfDateSourceItemsToOutputDirectory
_CopyAppConfigFile
CopyFilesToOutputDirectory
TypescriptDefinitionCompile
我希望我的任务TypescriptDefinitionCompile
能够在CopyFilesToOutputDirectory
之后CompileTypeScript
之前运行。
所以我将以下代码插入到项目文件中:
<UsingTask TaskName="msbuild.TypeScriptDefinitions" AssemblyFile="..." />
<Target Name="TypescriptDefinitionCompile"
AfterTargets="AfterBuild"
DependsOnTargets="CoreCompile;CopyFilesToOutputDirectory">
<Message Text="Compiling Typescript Definitions"/>
<TypeScriptDefinitions AssemblyPath="..." OutputPath="..." />
</Target>
<PropertyGroup>
<CompileTypeScriptDependsOn>
TypescriptDefinitionCompile;
</CompileTypeScriptDependsOn>
</PropertyGroup>
我发现属性AfterTargets
和BeforeTargets
通常无用,它实际上并没有重新排序我可以看到的构建执行然后我的任务抱怨它无法找到程序集或者打字稿版本运行得太早。出于这个原因,我使用DependsOnTargets
并覆盖VS打字稿目标文件中指定的CompileTypeScriptDependsOn
组。
现在构建顺序的结果是:
CoreResGen
CoreCompile
GetTypeScriptCopyToOutputDirectoryItems
_CopyOutOfDateSourceItemsToOutputDirectory
_CopyAppConfigFile
CopyFilesToOutputDirectory
TypescriptDefinitionCompile
CompileTypeScript
GenerateTargetFrameworkMonikerAttribute
我可以立即看到GenerateTargetFrameworkMonikerAttribute
任务位于错误的位置,因此我添加了CoreCompileDependsOn
以使其在CoreCompile
之前运行,从而修复了该任务的顺序但仍然会从生成的程序集中排除resx
个文件。我可以看到.resources
任务中的\obj
文件被发送到CoreResGen
,而CoreResGen
仍然在CoreCompile
之前运行,所以为什么资源不是被包括在内?
我还应该注意,除了省略的资源之外,所有到目前为止都使用此配置。事实上,在我注意到之前,我使用它已经有一个星期了。