2

最近、DeploymentItem を処理しようとすると、髪の毛が数本なくなりました。

ネイティブ dll 用の共通ディレクトリがいくつかあり、多くのテストはこれらに依存しています。

C++ プロジェクトの場合、これらのパスが定義されているプロパティ ページを使用します。これらは C# プロジェクトにインポートすることもでき、手動で編集することもできます (MSBuild ファイルであるため)。それでも、テストでそれらを利用する方法がわかりません。

残念ながら、DeploymentItemAttribute はシート内のプロパティを使用できませんが、環境変数を利用することはできます。誰もがグローバル環境変数を定義することを強制するのを避けたいと思っていました...

ネット上でさまざまな提案を見てきましたが、実際には簡単な解決策は見つかりませんでした。

誰もこれに良いアプローチをしていますか?

4

2 に答える 2

2

アンダースの答えは良い解決策ですが、私の場合:

  1. ソースツリー内にバイナリを保持するという考えは好きではありません
  2. 多くの dll には特定のバージョンがなく、定期的に更新されます。

私はどういうわけかこの解決策になりました:

まず、グローバル VC++ プロパティ ページをテスト プロジェクトに含めました。<Project>これは、.csproj の上にあるタグの下にこのディレクティブを追加して、手動で行う必要があります。

<Import Project="$(UserProfile)\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props" />

C++ 環境で dll パスを定義するプロパティ/マクロにアクセスできるようになりました。

そして私は・・・それから私は

  1. テストプロジェクトに新しいサブフォルダーを追加しました。"NativeDlls"
  2. 必要な dll をリンクとして NativeDlls フォルダーに追加しました
  3. リンクは絶対ですが、上記のプロパティ シートのマクロに置き換えることができます。

<Content Include="$(MyLibLocation)\GDAL18BIN\gdal18.dll">

<Link>NativeDlls\mylib.dll</Link>

<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

</Content>

これで、dll をデプロイする準備が整いました。

[TestMethod]
[DeploymentItem(@"NativeDlls")]
public void TestSomeStuff()
{
}

Anders が言及しているように、残りの作業は、デバッグ/リリースおよび 32/64 条件を設定することです。

于 2012-06-20T12:45:59.880 に答える
1

これらがこのプロジェクトでのみ使用される (ソース ツリー間で共有されない) 外部依存関係である場合は、それらをソース管理に移動することをお勧めします。依存関係は、ソースと共にバージョン管理する必要があります。その根拠は、ソース ツリーのリビジョン (履歴内の任意のリビジョン) をチェックアウトできる必要があり、それをビルドする必要があるということです。ソース管理下にないバイナリ依存関係がある場合、特定のバージョンのソースをビルドするときに、必要な依存関係のバージョンを判断するのに問題が生じます。

依存関係をソース ツリー (例: $svnroot/trunk/dependencies) に移動できる場合は、相対パスのみでテスト展開を使用できます。これは、TeamCity だけでなく、任意の開発者マシンでも動作します。

依存関係をバージョン管理できない場合、または何らかの理由で依存関係をリポジトリの外に置く必要がある場合は、テスト展開で使用できる環境変数を使用できます。例については、この msdn の投稿を参照してください

編集:バイナリ依存関係の管理に関するコメントをここに移動しました

csprojs の場合、ソース ツリーの下の lib ディレクトリにある dll:s へのプロジェクト内の dll 参照があります (つまり、..\lib\log4net.dll への参照)。x86/64 または Debug/Release など、個別のビルド用に個別のライブラリを参照する場合、VS はサポートしていませんが、MsBuild と csproj ファイルはサポートしているため、条件付き参照を追加できますが、csproj を編集する必要があります。たとえば、プラットフォームが x86 の場合にのみ x86 の依存関係を手動で含めます。

于 2012-06-20T10:22:59.027 に答える