8

複数の DLL 参照に依存する Visual Studio プロジェクトがあります。これは、私の csproj でのこれらの参照のサンプルです。

<ItemGroup>
  <Reference Include="Class1.Project1">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\bin\Class1.Project1.dll</HintPath>
    <Private>False</Private>
  </Reference>
  <Reference Include="Class1.Project2">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\bin\Class1.Project2.dll</HintPath>
    <Private>False</Private>
  </Reference>
</ItemGroup>

ただし、このクラスをプロジェクトの依存関係として Web サイト プロジェクトに含めると、Visual Studio は上記の依存関係の依存関係を検出します。ビルド中、Visual Studio は "Copy Local" プロパティを "True" にデフォルト設定し、これらの依存関係を Web サイトの ~/bin ディレクトリにコピーします。

これにより、このディレクトリに既に存在する DLL ファイルのバージョンが上書きされます。これにより、次のエラーが発生します。

ファイルまたはアセンブリ 'Class5.Project5, Version=3.6.1861.2, Culture=neutral, PublicKeyToken=dfeaee0e3978ac79' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)

Visual Studio のデフォルトの "Copy Local" 設定をすべて"False" にするにはどうすればよいですか? ビルド中に Visual Studio で DLL ファイルを自動的にコピーしたくありません。また、ビルドを非常に特定のバージョンの DLLに結び付けたくもありません。

4

4 に答える 4

2

同じディレクトリに出力するように複数のプロジェクトが構成されているように聞こえますが、これは本当ですか?

その場合、Visual Studioは各プロジェクトに一意の出力ディレクトリがあると想定しているため(いや、必要です)、構成を確認する必要があります。

また、あなたは書いた:

これにより、このディレクトリにすでに存在するDLLファイルのバージョンが上書きされます。

これらの既存のファイルはどこから来たのですか?

Visual Studioは、ビルド出力ディレクトリに収まると思われる変更を加える完全な権限があることを前提としています。これについて議論しようとすることは、まったく新しい苦痛の世界への良い道です。

(残念ながら、私は経験から話します。ため息をつきます。)

于 2009-05-18T09:21:25.167 に答える
1

私はかつてこの問題を抱えていました、

発行時: 既存の dll ファイルへの書き込みを防止する最も簡単な方法は、それらを読み取り専用に設定することです。置換できなかった各ファイルの発行時に警告が表示されますが、それは機能します。

ビルド時: CopyLocal を自動的にオフに設定するには、dll ファイルを GAC に配置する必要があります。

于 2009-05-15T11:40:22.093 に答える
0

プロジェクトファイルで次のことを試すことができます。

<ReferenceOutputAssembly>false</ReferenceOutputAssembly> 

そして、あなたのコードでこれを試してください。

<ItemGroup>
  <Reference Include="Class1.Project1">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\bin\Class1.Project1.dll</HintPath>
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  </Reference>
  <Reference Include="Class1.Project2">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\bin\Class1.Project2.dll</HintPath>
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  </Reference>
</ItemGroup>
于 2012-08-03T16:45:22.300 に答える