Почему Visual Studio удаляет букву диска из AssemblyReference RelativePath при редактировании проекта?

Используя visual studio, мы всегда загружаем и создаем ссылки на модуль (R:). Проблема в том, что когда кто-то редактирует какие-либо свойства проекта, буква диска удаляется из пути сборки, и тогда сборочная машина не может собрать приложение.

Файл проекта выглядит следующим образом:

<References>
    <AssemblyReference
    RelativePath="R:\ClientContext.dll"
    AssemblyName="ClientContext, Version=8.3.0.0, PublicKeyToken=255e4d2a8e3ef422, processorArchitecture=MSIL"
    MinFrameworkVersion="131072"
    />

И после редактирования любого свойства:

<References>
    <AssemblyReference
    RelativePath="ClientContext.dll"
    AssemblyName="ClientContext, Version=8.3.0.0, PublicKeyToken=255e4d2a8e3ef422, processorArchitecture=MSIL"
    MinFrameworkVersion="131072"
    />

Файлы проекта - vcproj, не знаю, происходит ли это и в других форматах.

Заранее спасибо товарищи.

3 ответа

Решение

Эта страница может дать вам некоторое представление, особенно важным является комментарий о параметре "RelativePath": "Относительный путь - отображает относительный путь от каталога проекта до ссылочной сборки". http://msdn.microsoft.com/en-us/library/47w1hdab.aspx

Проблема в том, что он всегда будет сбрасывать его по отношению к проекту.

Как утверждают другие люди, основная проблема заключается в том, что IDE хочет иметь относительные пути для ссылок. Это значительно упрощает совместное использование проекта / решения несколькими разработчиками, которые могут иметь очень разные настройки компьютера.

РЕДАКТИРОВАТЬ

Как указал Ганс, этот вопрос касается C++, который не поддерживает понятие HintPath в файле проекта. В случае, если пользователь C#, VB.Net или F# столкнется с вопросом

Одним из способов обойти это является использование подузла HintPath в Reference. Это дает IDE подсказку, где искать при разрешении относительного пути.

<References> 
    <AssemblyReference 
      RelativePath="ClientContext.dll" 
      AssemblyName="ClientContext, Version=8.3.0.0, PublicKeyToken=255e4d2a8e3ef422, processorArchitecture=MSIL" 
      MinFrameworkVersion="131072">
        <HintPath>R:\ClientContext.dll</HintPath>
    </AssemblyReference>

IDE действительно любит относительные пути, потому что абсолютные очень хрупкие. Ваша сборка также будет повреждена, если диск R: не будет правильно отображен. Но это поправимо: Project + Properties, Common Properties, Framework и References. Добавьте путь R:\ в список "Дополнительные пути поиска ссылок".

Другие вопросы по тегам