生成没有依赖项的MSBuild目标
是否有任何方法可以让MSBuild 4.0生成目标,但忽略任何依赖项?我只想建立目标本身,没有别的。这取决于你想要建立的目标。生成没有依赖项的MSBuild目标,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,是否有任何方法可以让MSBuild 4.0生成目标,但忽略任何依赖项?我只想建立目标本身,没有别的。这取决于你想要建立的目标。 如果目标是内置的且具有依赖项(如“Build”),则无法删除依赖项。 如果这是您自己的目标,您可以轻松实现: <Target Name="YourTargetWithDependencies" DependsOnTargets="YourTargetDependencies;YourTarget"> </Target> <
如果目标是内置的且具有依赖项(如“Build”),则无法删除依赖项。
如果这是您自己的目标,您可以轻松实现:
<Target Name="YourTargetWithDependencies"
DependsOnTargets="YourTargetDependencies;YourTarget">
</Target>
<Target Name="YourTarget" >
</Target>
对于Azure云计算项目中的CorePublish以及任何其他具有可自定义依赖项目标的项目,您可以尝试更改项目以修改依赖项的默认列表:
<Target Name=CallPublish>
<!-- Modified list of dependencies. Build is skipped here. -->
<PropertyGroup>
<CustomCorePublishDependsOn>
PrepareForPackaging;
CheckRoleInstanceCount;
CopyServiceDefinitionAndConfiguration;
ConfigureWebDeploy;
IntelliTrace;
</CustomCorePublishDependsOn>
</PropertyGroup>
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="CorePublish"
Properties="CorePublishDependsOn=$(CustomCorePublishDependsOn);Configuration=$(Configuration);Platform=$(Platform)">
</Target>
预包装;
CheckRoleInstanceCount;
CopyServiceDefinitionAndConfiguration;
配置webdeploy;
智能跟踪;
通常,目标的依赖项是用属性指定的,例如:
<Target Name="Foo" DependsOnTargets="$(FooDependsOn)">..</Target>
它将该属性设置为nothing,因此没有依赖项。可以覆盖内置目标,添加您自己的条件,并让您的目标复制原始目标,但这可能会涉及到很多问题。如果您可以跟踪单个依赖的内置目标,那么这是可以维护的。有时这些“核心”目标只包含一个DependsOnTargets列表,有时甚至是在属性中定义的目标,因此覆盖它并在缺少它们的地方添加条件是很简单的。有时,你需要做一个大的剪切和粘贴,以得到正确的 基本上,MSBuild将只维护为任何给定名称定义的最后一个目标,因此请查找项目导入包含要覆盖的目标的.target文件的位置,然后将包含覆盖的.target文件导入到该文件之后 例如,从Microsoft.Common.targets向“CoreBuild”目标添加条件与此一样简单,但在其他情况下保持相同的行为(目标条件具有下面的$(SkipCoreBuild)属性):
将上述内容放在您自己的目标文件中,并在标准后将其导入C#项目中
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
。。。将覆盖不具备选择性禁用它所需条件的默认实现
在任何情况下,如果您发现一个目标不允许您修改条件,我会在Connect上提交一个bug,描述您正在尝试做什么,MSBuild人员可能会对这类事情(随着时间的推移)做出相当大的响应.结果是内置的
生成
目标检查名为BuildProjectReferences
的属性以判断是否生成引用。我确实需要在项目本身上运行Build(否则它不工作),只是不需要依赖它。我最后打电话:
<MSBuild Projects="MyCloudProject.ccproj" Targets="CorePublish" Properties="Configuration=$(Configuration); BuildProjectReferences=false" />
我想重申@EMP的解决方案(由于我的名声不好,我不能投票支持他) 避免MSBuild重建项目文件中列出的所有依赖项的默认行为的正确方法是将
BuildProjectReferences
属性设置为false
在他的回答中,他从MSBuild脚本中调用MSBuild;下面是命令行中的一个示例:
MSBuild myproj.csproj /p:Configuration=Debug /p:BuildProjectReferences=false /t:Build
它是.ccproj项目的核心发布目标。当然,我可以在内部手动执行任何操作,我只是想知道是否有更好的方法。
<MSBuild Projects="MyCloudProject.ccproj" Targets="CorePublish" Properties="Configuration=$(Configuration); BuildProjectReferences=false" />
MSBuild myproj.csproj /p:Configuration=Debug /p:BuildProjectReferences=false /t:Build