我正在尝试为我们的某个产品编写自动构建,并且我已经遇到了一些VC ++项目的问题:我需要能够将输出路径设置为程序集的位置完成后复制。
这是一个临时的msbuild文件:
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<Target Name="Build">
<VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj"
ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages"
Configuration="Debug" />
</Target>
</Project>
Stijn的回答:
我以为我会用这个空间来澄清我个人如何使用Stijn的答案来解决这个问题。他的MSBuild文件中有一些代码可以为他编写vsprops文件。我决定采用一种更简单的方法,只需手动编写文件。
我创建了这个名为build.vsprops的文件(我的输出路径是V:)
<?xml version="1.0"?>
<VisualStudioPropertySheet ProjectType="Visual C++"
Version="8.00"
Name="Overrides"
OutputDirectory="V:\">
<Tool Name="VCCLCompilerTool"
AdditionalUsingDirectories="V:\" />
</VisualStudioPropertySheet>
然后我编辑了MSBuild文件以添加Override参数:
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<Target Name="Build">
<VCBuild Projects="C:\src\SomeProject\SomeProject.vcproj"
ToolPath="C:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages"
Configuration="Debug"
Override="$(MSBuildProjectDirectory)\build.vsprops" />
</Target>
</Project>
答案 0 :(得分:2)
查看VCBuild task的覆盖参数。基本上,您指定了一个属性表,您可以使用该属性表来覆盖您想要的任何属性(它与在VS中的项目中向列表顶部添加属性表具有相同的效果)。您甚至可以使用WriteLinesToFile任务生成覆盖文件。
示例:
<PropertyGroup>
<VCOverridesFile Condition=" '$(VCOverridesFile)'=='' ">overrides.vsprops</VCOverridesFile>
<VCOverridesOpen>%3C?xml version=%221.0%22?%3E%0D%0A%3CVisualStudioPropertySheet ProjectType=%22Visual C++%22 Version=%228.00%22 Name=%22My Overrides%22%3E</VCOverridesOpen>
<VCOverridesClose>%3C/VisualStudioPropertySheet%3E</VCOverridesClose>
<MyOutPath><Tool Name="VCLinkerTool" OutputFile ="c:\my.exe"/></MyOutPath>
</PropertyGroup>
<Target Name="WriteOverridesFile">
<WriteLinesToFile
File="$(VCOverridesFile)"
Lines="$(VCOverridesOpen);$(AdditionalVCOverrides);$(VCOverridesClose)"
Overwrite="true" />
</Target>
然后将$(VCOverridesFile)传递给Override属性,并确保VCBuild Task DependsOnTarget WriteOverridesFile。
答案 1 :(得分:0)
以脏方式执行此操作,您可以通过msbuild
的命令行参数传递输出目录路径。
msbuild yourProject /p:OutDir=yourPath
虽然我怀疑,应该有更好的方法来完成任务。主要思想是设置'OutDir'属性,使其不会被SomeProject.vcproj覆盖
答案 2 :(得分:0)
如果您正在使用 Azure DevOps 并且需要创建 YAML,请构建一个 .net 框架(vintage[old])
- task: VSBuild@1
inputs:
solution: '**\*.sln'
msbuildArgs: '/p:DeployOnBuild=true /p:SkipInvalidConfigurations=false /p:OutDir="$(System.DefaultWorkingDirectory)\publish_output"'
platform: 'Any CPU'
configuration: 'Release'