Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 在解决方案重建时始终在项目中执行目标,即使项目未修改_Visual Studio 2012_Msbuild - Fatal编程技术网

Visual studio 2012 在解决方案重建时始终在项目中执行目标,即使项目未修改

Visual studio 2012 在解决方案重建时始终在项目中执行目标,即使项目未修改,visual-studio-2012,msbuild,Visual Studio 2012,Msbuild,我有一个调用外部生成器的msbuild目标,即使未修改包含此目标的项目,也必须始终在解决方案重建时执行该目标 我曾尝试将其附加到$(BuildDependsOn),但它仅在项目被修改时执行 本质上,我必须扩展msbuild用于检查project是否被修改以插入我自己的检查的机制。我猜您是这样做的: <Target Name="MyCustomBeforeBuild" BeforeTargets="BeforeBuild" Inputs="@(Compile)" Outputs="@(Com

我有一个调用外部生成器的msbuild目标,即使未修改包含此目标的项目,也必须始终在解决方案重建时执行该目标

我曾尝试将其附加到
$(BuildDependsOn)
,但它仅在项目被修改时执行


本质上,我必须扩展msbuild用于检查project是否被修改以插入我自己的检查的机制。

我猜您是这样做的:

<Target Name="MyCustomBeforeBuild" BeforeTargets="BeforeBuild" Inputs="@(Compile)" Outputs="@(Compile->'%(RecursiveDir)%(Filename)%(Extension).generated')">
    <Message Text="MyCustomBeforeBuild Begin" Importance="High" />
    <Copy SourceFiles="@(Compile)" DestinationFiles="@(Compile->'%(RecursiveDir)%(Filename)%(Extension).generated')" />
    <Message Text="MyCustomBeforeBuild End" Importance="High" />
</Target>
但通过指定“假输出”(请参见目标的outputs属性中的
.fake
),您可以强制MSBuild每次都执行它(因为假文件不存在,所以不会进行时间戳比较,所以总是执行它)


我想你试过这样做:

<Target Name="MyCustomBeforeBuild" BeforeTargets="BeforeBuild" Inputs="@(Compile)" Outputs="@(Compile->'%(RecursiveDir)%(Filename)%(Extension).generated')">
    <Message Text="MyCustomBeforeBuild Begin" Importance="High" />
    <Copy SourceFiles="@(Compile)" DestinationFiles="@(Compile->'%(RecursiveDir)%(Filename)%(Extension).generated')" />
    <Message Text="MyCustomBeforeBuild End" Importance="High" />
</Target>
但通过指定“假输出”(请参见目标的outputs属性中的
.fake
),您可以强制MSBuild每次都执行它(因为假文件不存在,所以不会进行时间戳比较,所以总是执行它)



您可能应该发布目标/项目文件的外观。通常情况下,重建会清理所有项目(无论是否已修改),并重建它们?如果这是解决方案,您也可以删除您的问题(我认为),您可能应该发布您的目标/项目文件的外观。通常情况下,重建会清理所有项目(无论是否修改),并重建它们?如果这是解决方案,您也可以删除您的问题(我认为)
在VS2012中构建之前
似乎不起作用,请使用
在VS2012中构建之前目标=…
,请参阅我尝试过这种方法,但它不起作用。我也尝试过添加InitialTargets,结果相同。Visual Studio似乎甚至没有在此项目上调用msbuild。并且可以找到解决方案。
BeforeBuild
在VS2012中似乎不起作用,请使用
BeforeTargets=…
,请参见我尝试过此方法,但不起作用。我也尝试过添加InitialTargets,结果相同。Visual Studio似乎甚至没有在此项目上调用msbuild。并且可以找到解决方案。
<Target Name="MyCustomBeforeBuild" BeforeTargets="BeforeBuild" Inputs="@(Compile)" Outputs="@(Compile->'%(RecursiveDir)%(Filename)%(Extension).generated.fake')">
    <Message Text="MyCustomBeforeBuild Begin" Importance="High" />
    <Copy SourceFiles="@(Compile)" DestinationFiles="@(Compile->'%(RecursiveDir)%(Filename)%(Extension).generated')" />
    <Message Text="MyCustomBeforeBuild End" Importance="High" />
</Target>