8

msbuild.exeコマンドラインからビルドを自動化するために使用しています。

次の手順を実行します。

  • プロジェクトをプロジェクトディレクトリの外にあるフォルダにコンパイルします
  • コンパイルされたすべてのプロジェクトをzip形式で圧縮します

これが私の目標です

最初にコンパイルする

<Target Name="BuildProjects"  DependsOnTargets="BeforeBuild">

    <ItemGroup>      
  <BuildProjectFiles Include="**\MyCompany.Project1\MyCompany.Project1.csproj" />
  <BuildProjectFiles Include="**\MyCompany.Project2\MyCompany.Project2.csproj" />
  <BuildProjectFiles Include="**\MyCompany.Project2\MyCompany.Project2-CE.csproj" />
      ... and some more
    </ItemGroup>

    <MSBuild Projects="@(BuildProjectFiles)" Properties="AllowUnsafeBlocks=true;Configuration=$(Configuration);OutputPath=$(MSBuildProjectDirectory)\Deploy\bin\%(BuildProjectFiles.FileName)">
        <Output TaskParameter="TargetOutputs"
                ItemName="BuildProjectsOutputFiles" />
    </MSBuild>

</Target>

そして今、すべてのコンパイルされたプロジェクトをその1つのファイルにzipするターゲット。

<Target Name="ZipProjects" DependsOnTargets="BuildProjects">

    <CreateItem
        Include="@(BuildProjectOutputFiles)"
            AdditionalMetadata="AssemblyName=%(Filename);ProjectName=%(RelativeDir)">
        <Output TaskParameter="Include" ItemName="BuildProjectsOutputFiles123"/>
    </CreateItem>

    <CreateItem Include="%(BuildProjectsOutputFiles123.RelativeDir)*" AdditionalMetadata="OutputFileName=$(MSBuildProjectDirectory)\Deploy\dist\$(Configuration)\%(BuildProjectsOutputFiles123.AssemblyName)-$(MajorNumber).$(MinorNumber).$(ReleaseNumber).zip;WorkingDirectory=%(BuildProjectsOutputFiles123.RelativeDir)">
        <Output TaskParameter="Include" ItemName="BuildProjectsOutputFiles456"/>
    </CreateItem>

    <Zip Files="@(BuildProjectsOutputFiles456)"
        WorkingDirectory="%(BuildProjectsOutputFiles456.WorkingDirectory)" 
        ZipFileName="%(BuildProjectOutputFiles456.OutputFileName)"  />
        <!-- ZipLevel="9"/> -->

</Target>

つまり、で指定したすべてのプロジェクトがBuildProjectFilesフォルダーにコンパイルされます。<rootdir>\deploy\bin\<name of the csproj file without extension\

2番目のステップでは、MSBuild.Community.TasksZip-Taskを使用してすべてのプロジェクトをzipし、にコピーします。<rootdir>\deploy\dist\release\<assemblyname>-<version>.zip

したがって、基本的に、アセンブリproject1.exeとその依存関係は、project1-2.4.7.zipmsbuildの実行後にファイルに含まれます。

それは非常にうまく機能します。しかし今、私はどのように解決するのか理解できない変化があります。同じアセンブリ名の2つのアセンブリ(1つはWindows用、もう1つはWindows CE用)があるため、最初のプロジェクトはコンパイルしてフォルダーを作成しproject2-2.4.7.zip、次のプロジェクトはコンパイルしてzipファイルを上書きします。

ここで、Zipファイルにファイルにちなんで名前を付けたいと思い.csprojます(binフォルダーなど)。1つのプロジェクトファイルが呼び出されmycompany.project2.csproj、もう1つのプロジェクトファイルが呼び出されるので、mycompany.project2-ce.csproj問題ないはずです。

つまり、プロジェクト名をzipターゲットに渡すにはどうすればよいですか?

4

1 に答える 1

1

これは適切ですか?$(MSBuildProjectName)

MSBuild の予約済みプロパティ

于 2012-08-23T03:25:31.867 に答える