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.Tasks
Zip-Taskを使用してすべてのプロジェクトをzipし、にコピーします。<rootdir>\deploy\dist\release\<assemblyname>-<version>.zip
したがって、基本的に、アセンブリproject1.exe
とその依存関係は、project1-2.4.7.zip
msbuildの実行後にファイルに含まれます。
それは非常にうまく機能します。しかし今、私はどのように解決するのか理解できない変化があります。同じアセンブリ名の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ターゲットに渡すにはどうすればよいですか?