有什么办法可以告诉MSBuild 4.0建立目标,但忽略任何依赖关系?我只是想建立自己的目标,没有别的。建立MSBuild目标没有依赖关系
回答
我想重申@ EMP的解决方案(我不能投票他,因为我的小名声)。
避免重建项目文件中列出的所有依赖项的MSBuild默认行为的正确方法是将BuildProjectReferences
属性设置为false。
在他的回答中,他从MSBuild脚本中调用MSBuild;这里是命令行的一个例子:
MSBuild myproj.csproj /p:Configuration=Debug /p:BuildProjectReferences=false /t:Build
这取决于你想要建立的目标。
如果目标是内置的并且具有依赖关系(如“Build”),则不能删除依赖关系。
如果这是你自己的目标,你可以很容易地实现它:
<Target Name="YourTargetWithDependencies"
DependsOnTargets="YourTargetDependencies;YourTarget">
</Target>
<Target Name="YourTarget" >
</Target>
对于CorePublish在Azure云计算项目以及其他任何与可定制DependsOn目标,你可以尝试改变项目修改默认依赖列表:
<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>
通常一个目标的依赖与属性指定的,例如:
<Target Name="Foo" DependsOnTargets="$(FooDependsOn)">..</Target>
在可以调用的MSBuild作为
msbuild bar.proj /p:FooDependsOn=
它设置该属性不了了之,所以没有依赖这种情况。
也许可以重写内置目标,添加自己的条件,并让目标复制原始内容,但这可能会相当复杂。如果你可以追踪一个独立的内置目标,这可以被维护。有时候这些“核心”目标不过是一个DependsOnTargets列表,有时甚至是在一个属性中定义的,所以重写它并添加一个缺失的条件是微不足道的。有时候,虽然你需要做一个大的剪切和粘贴来让它正确。
基本上,MSBuild将只维护任何给定名称的最后一个目标定义,因此找到您的项目导入包含要覆盖的目标的.target文件的位置,然后将自己的.target文件导入包含在它之后重写。
例如,添加的条件从Microsoft.Common.targets了“CoreBuild”目标是,因为这容易,同时保持相同的行为,否则(与$(SkipCoreBuild)以下属性的目标条件):
<Target
Name="CoreBuild"
Condition="'$(SkipCoreBuild)' != 'true'"
DependsOnTargets="$(CoreBuildDependsOn)">
<OnError ExecuteTargets="_TimeStampAfterCompile;PostBuildEvent"
Condition="'$(RunPostBuildEvent)'=='Always' or
'$(RunPostBuildEvent)'=='OnOutputUpdated'"
/>
<OnError ExecuteTargets="_CleanRecordFileWrites" />
</Target>
放置在上面自己的目标,文件和标准后,C#项目导入它...
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
...将覆盖没有你所需要的条件的默认实现选择性地禁用它。
在任何情况下,如果您发现不允许您修改条件的目标,我会在Connect上描述您正在尝试执行的操作,MSBuild人员可以对这种(随着时间的推移)。
事实证明,内置的Build
目标会检查名为BuildProjectReferences
的属性来判断是否构建引用。我确实需要在项目本身上运行Build(否则它不起作用),而不是它的依赖关系。我结束了电话:
<MSBuild Projects="MyCloudProject.ccproj" Targets="CorePublish" Properties="Configuration=$(Configuration); BuildProjectReferences=false" />
- 1. 建立nuget依赖关系构建
- 2. 在xslt中建立依赖关系
- 3. 与Cmake建立依赖关系
- 4. 为什么MSBuild任务不会构建项目依赖关系?
- 5. Maven独立依赖关系?
- 6. PostgreSQL设计依赖关系树没有循环依赖关系
- 7. 使用Maven创建两个独立的jar,没有依赖关系,仅依赖关系
- 8. 自定义MSBuild任务依赖关系
- 9. Visual Studio项目构建依赖关系没有引用?
- 10. maven force重建依赖项目(首先构建依赖关系)
- 11. maven在多模块项目中建立依赖关系的jar
- 12. Gradle子项目构建依赖关系
- 13. MSBuild,建立不同配置的依赖项目
- 14. 依赖关系的nuget依赖关系
- 15. VS2010项目依赖关系
- 16. Sbt项目依赖关系
- 17. Eclipse项目依赖关系
- 18. 的MSBuild目标的依赖单独
- 19. MSBuild和Web部署项目外部依赖关系
- 20. create.aar文件没有依赖关系
- 21. 工件依赖关系没有解决
- 22. mvn清洁没有依赖关系
- 23. 安装nodejs没有依赖关系
- 24. GHC没有链接依赖关系
- 25. 摇篮依赖关系没有的IntelliJ
- 26. aspectjweaver依赖关系没有下载
- 27. Snakemake:没有输入的依赖关系
- 28. 依赖项的依赖关系没有被复制到输出目录
- 29. 独立OpenEJB打包与依赖关系
- 30. 结构图 - 具有依赖关系的安装依赖关系
是的,它是一个内置的,当然。 – EMP 2011-02-28 09:14:25
@Evgeny,你能指定它吗? – 2011-02-28 09:33:47
它是.ccproj项目上的CorePublish目标。当然,我可以手动进行内部的任何操作,我只是想知道是否有更好的方法。 – EMP 2011-02-28 11:00:53