Нам нужно продублировать поведение диалогового окна «Добавить ссылку», используя DTE, когда вы добавляете конкретную DLL (он добавляет запись пути подсказки к ссылке в CSProj файл).
** Примечание: есть еще одно связанное, но не дублированное сообщение от меня здесь: https://stackoverflow.com/questions/6690655/visual-studio-2010-add-in- как-получить-ссылки-подсказки-путь-свойство Пожалуйста, прочтите также эту статью для получения дополнительной информации об этой проблеме. Я добавил приличную награду, чтобы получить ответ на этот вопрос, и с радостью распределю голоса за любые достойные ответы :) *
Я программно конвертирую ссылку на проект в прямую ссылку на DLL. используя DTE.
Предполагая, что у меня есть простое решение с Project2
(родительский проект ), который ссылается на Project1
(дочерний проект ) , Я вношу следующие изменения:
project1Reference = FindProjectReference(project2.References, project1);
project1Reference.Remove();
Reference dllReference = project2.References.Add(project1DllPath);
где project1DllPath относится к файлу «c: \where \ Project1 \ Bin \ Debug \ Project1.dll»
.
Проблема, которую я пока не могу решить, это что новая ссылка не для
"c: \ where \ Project1 \ Bin \ Debug \ Project1.dll"
, но вместо этого указывает на
"c: \ where \ Project2 \ Bin \ Debug \ Project1.dll"
(и файл копируется туда).
Если я добавляю DLL напрямую / вручную с помощью меню «Добавить ссылку», он делает не делайте это копирование.
Как мне добавить ссылку на DLL в существующую библиотеку DLL проекта, не делая копию и ссылаясь на нее вместо этого?
Я попытался добавить dllReference.CopyLocal = false;
после добавления, но кроме установки флага это не имело никакого значения. Похоже, что нет возможности изменить путь после создания.
Обновление: я также пытался программно удалить любую зависимость сборки от Project1 из Project2, но это не дало результата.
Ниже приведена разница между файлами csproj:
{86B3E118-2CD1-49E7-A180-C1346EC223B9}
ClassLibrary1
False
...
..\ClassLibrary1\bin\Debug\ClassLibrary1.dll
...
Похоже, что возможность указать путь подсказки для ссылки на DLL является ключом . Как задать путь подсказки для ссылки на DLL (при условии, что у вас есть только дескриптор свойства Reference)?
Предложение от Muse VSExtensions ниже не влияет на рассматриваемые библиотеки DLL, поскольку уже была сделана копия из BIN проекта библиотеки DLL в папку BIN родительского проекта. Родительский проект не беспокоится об использовании ссылочного пути, поскольку он уже имеет дочернюю DLL в своей выходной папке.
Также Ссылочные пути
проекта сохраняются в проекте .csproj.user файл, а не файл проекта .csproj.