Программное добавление в C# ссылки на проект (в отличие от ссылки на сборку) через EnvDTE

В Visual Studio, когда вы добавляете ссылку на существующий проект в свое решение в файле .csproj, это заканчивается так:

<ProjectReference Include="..\TestProject2\TestProject2.csproj">
  <Project>{15EC8369-B0C5-4F71-A366-19042F450A2D}</Project>
  <Name>TestProject2</Name>
</ProjectReference>

Если я добавлю ссылку на сборку DLL через EnvDTE:

var p = _project as VsProject;
p.References.Add(<path to assembly DLL>);

это заканчивается так:

<Reference Include="TestProject2.csproj">
  <HintPath>..\TestProject2\bin\Debug\TestProject2.csproj.dll</HintPath>
</Reference>

Это не так уж и здорово, потому что, если я переключусь на сборку Release, она все равно будет ссылаться на отладочную сборку. Другая проблема заключается в том, что мне нужно построить сборку, на которую ссылаются, прежде чем я смогу добавить ее в качестве ссылки. С помощью пользовательского интерфейса Visual Studio я могу добавить ссылку на несобранный проект.

Можно ли через EnvDTE API добавить ссылку на проект?

Я знаю, что могу манипулировать файлом .csproj как XML-документом и делать все, что захочу, но, поскольку я начал путь на EnvDTE, я бы предпочел придерживаться его.


person Pyramid Newbie    schedule 17.07.2012    source источник


Ответы (2)


Похоже, что в интерфейсе References есть AddProject, который обрабатывает ссылки между проектами.

person Jimmy    schedule 17.07.2012
comment
Я считаю, что вы также можете добавить ссылку на проект с помощью Add.References, указав имя проекта. см. blogs.msdn.com/b/murat/archive/2008/07/30/ - person Peter Ritchie; 18.07.2012
comment
Получение этой ошибки. msdn.microsoft.com/en-us/library /ms228768(v=vs.110).aspx Пробовал решение, но оно не помогло. - person A Coder; 10.03.2014

Что сработало для меня, так это сформулировать ссылки следующим образом:

<Reference
  Include="MyDll"
  Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <HintPath>..\..\somePath\Debug\myDll.dll</HintPath>
</Reference>
<Reference
  Include="MyDll"
  Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  <HintPath>..\..\somePath\Release\myDll.dll</HintPath>
</Reference>

Таким образом, сборка выпуска ссылается на зависимость от выпуска, а сборка отладки ссылается на Debug. Конечно, при необходимости можно обрабатывать и x86/x64. Это было для 32-битного приложения.

person srdanz    schedule 06.02.2013