2012-06-19 3 views
2

В моем одном из установщиков MSI я обновляю путь сравнения и сборки ссылки проекта. Все все сборки ссылок внутри папки моего приложения.Какой правильный подход для ссылки на сборку в файле csproj?

Я пытаюсь реализовать как относительный путь, так и абсолютный путь. Оба работают нормально.

Относительный путь

<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 файл?

ответ

1

Как вы заявили: Оба работают нормально.

Есть угловые случаи, когда он на самом деле имеет значение, если вы используете относительные или абсолютные пути в файле .csproj:

  • Когда вы планируете переместить файл .csproj. Также будут перемещены ссылочные сборки, затем идут относительные пути, в противном случае - абсолютные пути.
  • Если у вас есть крайняя вложенность в структуре папок, то относительный путь может превышать ограничение имени пути 260 символов. Это происходит потому, что полный путь строится внутри, просто конкатенируя путь каталога проекта и относительный путь (включая все ..\). Затем конкатенированный путь может превышать упомянутый выше предел имен в пути, тогда как абсолютный путь - нет.
+3

Похоже, Visual Studio принимает переменную окружения, так что вы можете сказать ' $ (ProgramFiles) \ MyApplication \ log4net.dll', если вы хотите абсолютный путь. Преимущество состоит в том, что если имя папки локализовано (которое находится в неанглийских версиях Windows) или содержит суффикс '(x86), он все равно должен работать. Тем не менее, я не знаю, поддерживаются ли другие инструменты, кроме Visual Studio, с переменными окружения в пути подсказки. –