4

MSIインストーラーの1つで、アセンブリとプロジェクト参照の相対パスをプログラム的に更新しています。すべての参照アセンブリは、アプリケーションフォルダー内にあります。

相対パスと絶対パスの両方を実装しようとしています。どちらも正常に動作しています。

相対パス

 <Reference Include="log4net">
      <HintPath>..\..\..\..\log4net.dll</HintPath>
 </Reference>

絶対パス

 <Reference Include="log4net">
          <HintPath>C:\Program files\Myapplication\log4net.dll</HintPath>
 </Reference>

参照アセンブリ パスまたは GAC ファイルからアセンブリの参照を取得するときに、絶対パス参照しか見たことがありません。

C:\Program Files (x86)\Reference Assemblies

 <Reference Include="System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll</HintPath>
    </Reference>

.Csprojパスをファイルに更新するための正しいアプローチはどれですか?

4

1 に答える 1

2

あなたが述べたように:両方とも正常に動作します。

ファイルで相対パスを使用しているか絶対パスを使用しているかが実際に問題になる、まれなケースがあり.csprojます。

  • .csprojファイルの移動を計画している場合。参照されているアセンブリも移動し、相対パスを使用するか、そうでない場合は絶対パスを使用します。
  • フォルダー構造に極端なネストがある場合、相対パスが 260 文字のパス名制限を超える可能性があります。これは、プロジェクト ディレクトリ パスと相対パス (すべての..\. 連結されたパスは、前述のパス名の文字数制限を超える可能性がありますが、絶対パスは超えません。
于 2012-07-10T17:38:33.790 に答える