14

MyLibいくつかの例とともにライブラリプロジェクトがあります。ライブラリとサンプルは同じソリューションにありMySolutionます。

ライブラリ プロジェクトではMyLib、MSBuild コードを含めてソリューション全体を圧縮し、インターネット公開用に別のディレクトリにコピーしました。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
  <Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'">
    <PropertyGroup>
      <ReleasePath>C:\Users\Administrator\Projects\CA\Libraries\Api-DotNet\</ReleasePath>
      <ZipFile>C:\Users\Administrator\Projects\CA\WebProject\libraries\Api-DotNet.zip</ZipFile>
    </PropertyGroup>
    <ItemGroup>
      <LibraryFiles Include="$(ReleasePath)\**\*.*" Exclude="$(ReleasePath)\**\*.user;$(ReleasePath)\**\*.suo;$(ReleasePath)\Api.*;$(ReleasePath)\**\packages\**;$(ReleasePath)\**\Lib.Test\**;$(ReleasePath)\**\*.nuspec;$(ReleasePath)\**\*.nupkg;$(ReleasePath)\**\*nuget*;$(ReleasePath)\**\*internal*;$(ReleasePath)\**\*ReSharper*\**;$(ReleasePath)\**\.svn\**;$(ReleasePath)\**\obj\**;$(ReleasePath)\lib\bin\Debug\**;$(ReleasePath)\lib\bin\Publish\**;$(ReleasePath)\Example\**\bin\**;" />
    </ItemGroup>
    <Zip Files="@(LibraryFiles)" WorkingDirectory="$(ReleasePath)" ZipFileName="$(ZipFile)" ZipLevel="9" />
  </Target>  
</Project>

問題は、ユーザーがライブラリをダウンロードして別のコンピューターで実行すると、コンパイラが import library not found というエラーを表示することMSBuild.Community.Tasks.Targetsです。ソリューションをビルドするときに、プロジェクト ファイルから ZipAndCopy コードを除外したいと考えています。どうやってするか?

4

3 に答える 3

13

これをと要素Conditionの両方に追加します。ImportZip

Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Commu‌​nity.Tasks.Targets')"

例えば:

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"
        Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Commu‌​nity.Tasks.Targets')" />

これに似ています:C#csprojのプロパティ'Starts /EndsWith'かどうかを確認します

于 2012-07-24T09:06:03.387 に答える
3

複数のビルド構成が必要なようです。アーティファクトを構築および圧縮するために特別に設定し、ユーザー用に別のものを設定することをお勧めします。

Release ZIPファイルをzipするpost-build-eventをRelease使用したビルドである可能性があり、コミュニティタスクを使用して特別なことを何も行わない通常のビルドである可能性があります。

于 2012-07-24T09:05:15.113 に答える