重新排序msbuild任务会导致从程序集中省略资源

时间:2016-12-15 11:37:03

标签: .net build msbuild resources resx

我试图将自定义任务集成到我的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>

我发现属性AfterTargetsBeforeTargets通常无用,它实际上并没有重新排序我可以看到的构建执行然后我的任务抱怨它无法找到程序集或者打字稿版本运行得太早。出于这个原因,我使用DependsOnTargets并覆盖VS打字稿目标文件中指定的CompileTypeScriptDependsOn组。

现在构建顺序的结果是:

CoreResGen
CoreCompile
GetTypeScriptCopyToOutputDirectoryItems
_CopyOutOfDateSourceItemsToOutputDirectory
_CopyAppConfigFile
CopyFilesToOutputDirectory
TypescriptDefinitionCompile
CompileTypeScript
GenerateTargetFrameworkMonikerAttribute

我可以立即看到GenerateTargetFrameworkMonikerAttribute任务位于错误的位置,因此我添加了CoreCompileDependsOn以使其在CoreCompile之前运行,从而修复了该任务的顺序但仍然会从生成的程序集中排除resx个文件。我可以看到.resources任务中的\obj文件被发送到CoreResGen,而CoreResGen仍然在CoreCompile之前运行,所以为什么资源不是被包括在内?

我还应该注意,除了省略的资源之外,所有到目前为止都使用此配置。事实上,在我注意到之前,我使用它已经有一个星期了。

0 个答案:

没有答案