私はSQL Serverアセンブリを参照するいくつかのプロジェクトを持っています。 SQL Server 2005とSQL Server 2008では、現在同じソースファイルを指す2つのプロジェクトファイルを管理していますが、唯一の違いはSQL Serverアセンブリへの参照だけです。msbuildでビルドし、プロジェクト参照を動的に設定します
私は1つのプロジェクトを管理し、ビルドスクリプトで参照を動的に指定できる方法はありますか?
私はSQL Serverアセンブリを参照するいくつかのプロジェクトを持っています。 SQL Server 2005とSQL Server 2008では、現在同じソースファイルを指す2つのプロジェクトファイルを管理していますが、唯一の違いはSQL Serverアセンブリへの参照だけです。msbuildでビルドし、プロジェクト参照を動的に設定します
私は1つのプロジェクトを管理し、ビルドスクリプトで参照を動的に指定できる方法はありますか?
あなたは、私がItemGroup上の条件を持っていることの提案された解決策に来ていたのと同じ問題への解決策を検索します。しかし、これは副作用がありました。なぜなら、Visual Studioのリファレンスでは両方のリファレンスを見ることができ、これもReSharperに影響を与えました。
最終的にChoose Whenを選択してください。ReSharperとVisual Studioで2つの参照が表示されても問題は発生しません。
<Choose>
<When Condition=" '$(Configuration)' == 'client1DeployClickOnce' ">
<ItemGroup>
<ProjectReferenceInclude="..\client1\app.Controls\app.Controls.csproj">
<Project>{A7714633-66D7-4099-A255-5A911DB7BED8}</Project>
<Name>app.Controls %28Sources\client1\app.Controls%29</Name>
</ProjectReference>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<ProjectReference Include="..\app.Controls\app.Controls.csproj">
<Project>{2E6D4065-E042-44B9-A569-FA1C36F1BDCE}</Project>
<Name>app.Controls %28Sources\app.Controls%29</Name>
</ProjectReference>
</ItemGroup>
</Otherwise>
</Choose>
あなたは私のブログの記事にそれについての詳細を読むかもしれない:ProjectReference with Condition in your MSBuild project file
偉大な解決策Laurent、重複した参照は迷惑で、この解決策はその問題を修正します。ありがとう! –
Visual Studio 2015では動作しません –
すべてのMSBuild要素(okほぼすべて)には、Conditionが関連付けられています。私は何を示唆していると、あなたは(MSBuildのファイル自体である)プロジェクトファイルを編集して、例えばその上に条件を持っているItemGroup内のすべてのSQLサーバーの参照を配置することである:
<ItemGroup Condition="'$(SqlServerTargetEdition)'=='2005'">
<!-- SQL Server 2005 References here -->
<Reference Include="..."/>
</ItemGroup>
とSQLのための別のItemGroupサーバー2008:
これらの項目が宣言される前に、プロパティSqlServerTargetEditionの既定値を指定する必要があります。コマンドラインで、msbuild.exeを呼び出すときに/ pスイッチを使用してその値を上書きすることができます。
サイード・イブラヒムHashimi
のMy Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
恐ろしい本!私はそれがあり、それは私の正気を救った!スタックオーバーフローでここにお会いできてうれしく思います! – Cyberherbalist
これはまさに私が後にしているように聞こえる。私は今夜自宅でこれをテストします。ありがとうございました! –
2005のアセンブリは、2008に対して動作しないのですか? –
いいえ、2008年のアセンブリは2005年とは違っています。唯一の問題は、これらのプロジェクトをコードplexで2回リリースし、SQL 2005のみの人と2008年の人のためにリリースすることです。これらのアセンブリはGACにあります(私が知っている限り)私はすべての依存関係を再配布できません。私はできるだけ私のリリースサイズを膨らませたいと思っています。 –