2017-03-20 13 views
1

私はWebプロジェクトProject AとライブラリProject Bを持っています。 プロジェクトBはProject A \ Pluginsに組み込まれています。プロジェクトAは、CIのプロジェクトA.のMSBuildのparamsで展開されていないCIプロジェクトBを介して構築されている場合TFS継続的インテグレーションとデシジョン

問題は次のとおり

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\" /t:ProjectA 

私はプロジェクトA.csprojに次のコードを追加プロジェクトBを展開する:展開された後、ログを実行ために

<ItemGroup> 
    <ProjectsToBuild Include="..\..\Plugins\**\*ProjectB*proj" /> 
    </ItemGroup> 
    <Target Name="Plugin" AfterTargets="Build"> 
    <Message Text="Building Plugins" Importance="High" /> 
    <MSBuild Projects="@(ProjectsToBuild)" ContinueOnError="false" Properties="Configuration=$(Configuration)"> 
     <Output ItemName="OutputFiles" TaskParameter="TargetOutputs" /> 
    </MSBuild> 

    <CallTarget Targets="CopyPlugins"/> 
    </Target> 


    <PropertyGroup> 
     <PluginDirectory>Plugins</PluginDirectory> 
    </PropertyGroup> 
    <Target Name="CopyPlugins"> 
     <Message Text="Copying plugins to $(_PackageTempDir)\Plugins\ ($(ProjectDir)$(PluginDirectory))" Importance="high" /> 
     <CreateItem Include="$(ProjectDir)$(PluginDirectory)\**\*.*"> 
      <Output TaskParameter="Include" ItemName="PluginFiles" /> 
     </CreateItem> 
     <Copy DestinationFolder="$(_PackageTempDir)\Plugins\" SourceFiles="@(PluginFiles)" SkipUnchangedFiles="true" /> 
    </Target> 

は(ビルド後にコピーします)細かいようだが、プラグインフォルダは、ターゲット・サーバー上に存在しません。

何か不足していますか?

+0

することで、PROJECTAとProjectBの両方が含まれているの.sln(ソリューション)を持っていない理由があり、 ProjectAはProjectBを "プロジェクト別に"参照します(Visual Studio)。これは物事をより簡単にするでしょう。 – granadaCoder

+0

使用しているTFSのバージョンは? XAMLビルドまたはタスクベースビルドを使用していますか? Pluginフォルダにチェックインしますか?ビルドエージェントマシンにログインし、MSBuildコマンドラインを使用して手動でプロジェクトをビルドして、どのような結果が得られるかを確認してください。 –

答えて

0

プロジェクトにファイルを含める必要があります。ファイルが動的に生成され、あなたがファイルを投影するこのコードを追加することができますので(例えばXX.csproj)

<Content Include="plugin\**\*.*" /> 
+0

ありがとう!魅力のように働く! :) – RunicSheep

0

説明から、Project A \ PluginsフォルダをTFSにチェックインする必要があります。しかし、それは示唆されていません。

同じソリューションでプロジェクトリファレンスを作成するか、パッケージ管理用にNuGetを作成することをお勧めします。プロジェクトBの場合はbuild a nuget package、プロジェクトAの場合はpublish this Nuget package、その後はrestore the libraryをプロジェクトAに割り当てることをお勧めします。

関連する問題