72

SDK ディストリビューション用のサンプル コードをパッケージ化しています。ディストリビューションでは、コードから SDK アセンブリへの相対パスはビルド マシンとは異なります。例えば:

分布

csharp/bin/assembly.dll
example/ex1/ex1.csproj

ビルドマシン

foo/sdk/csharp/bin/assembly.dll
bar/baz/quux/ex1/ex1.csproj

何も動けないとします。ex1.csproj両方を見るように指示できる方法はありますか

../../csharp/bin/ ../../../../foo/sdk/csharp/bin/_assembly.dll

C++ では、依存関係のパスをスタンドアロンのプロパティ シートに入れ、SDK で別のバージョンを配布します。しかし、C# にはプロパティ シートがなく、完全なプロジェクトの 2 つのバージョンを維持したくありません。

複数のタグを使用できないというこの質問を見<HintPath>たので、同じ動作を近似する別の方法を探しています。

4

6 に答える 6

22

親ディレクトリがツリーのどこかで異なることが保証されている私のケースで機能するハックなソリューションを見つけました。

<Choose>
  <When Condition="Exists('$(MSBuildProjectDirectory)\..\..\example')">
    <ItemGroup>
      <Reference Include="Assembly ...">
        <HintPath>..\..\csharp\bin\assembly.dll</HintPath>
      </Reference>
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <Reference Include="Assembly ...">
         <HintPath>..\..\..\..\..\foo\sdk\csharp\bin\assembly.dll</HintPath>
      </Reference>
    </ItemGroup>
  </Otherwise>
</Choose>
于 2013-03-27T19:23:45.993 に答える
6

次のようにセカンダリ パスを一般プロパティ グループに追加します。csproj ファイルで

<PropertyGroup>
    <ReferencePath>..\..\..\..\..\foo\sdk\csharp\bin\</ReferencePath>
    ...
</PropertyGroup>

ReferencePathプロパティはMsBuild実行時に指定するものですが、このままでも問題なく動作します。

于 2013-03-27T20:29:13.890 に答える
0

たとえば、パスが同じになるため、フォルダーをドライブにサブストして/csharp/bin(マシンごとに異なる)、または両方のマシンX:を参照できます。X:\X:\bin

于 2013-03-27T18:30:19.420 に答える