3

製品の 1 つで自動ビルドを作成しようとしていますが、いくつかの 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 の回答を個人的にどのように使用したかを明確にすると思いました。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>
4

3 に答える 3

2

VCBuild タスクの Override パラメータを見てください。基本的に、必要なプロパティをオーバーライドするために使用できるプロパティ シートを指定します (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>&lt;Tool Name="VCLinkerTool" OutputFile ="c:\my.exe"/&gt;</MyOutPath>
</PropertyGroup>

<Target Name="WriteOverridesFile">
  <WriteLinesToFile
    File="$(VCOverridesFile)"
    Lines="$(VCOverridesOpen);$(AdditionalVCOverrides);$(VCOverridesClose)"
    Overwrite="true" />
</Target>

次に $(VCOverridesFile) を Override プロパティに渡し、VCBuild タスクが DependsOnTarget WriteOverridesFile であることを確認します。

于 2010-11-22T21:48:07.863 に答える
0

のコマンドライン引数を介して出力ディレクトリパスを渡すことができる汚い方法でそれを行いますmsbuild

msbuild yourProject /p:OutDir=yourPath

私は疑問に思っていますが、タスクを達成するためのより良い方法があるはずです。主なアイデアは、SomeProject.vcproj によってオーバーライドされないように「OutDir」プロパティを設定することです。

于 2010-11-22T21:24:12.523 に答える
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'
于 2021-03-10T21:18:41.650 に答える