Компиляция в коде в библиотеке: Как добавить ссылку на DLL к компоненту, когда компонент расположен в проекте, на котором размещена библиотека?

#.net #compiler-construction

#.net #компилятор-построение

Вопрос:

Я пишу библиотеку классов (скажем: lib), которая анализирует и компилирует шаблоны Razor. На библиотеку классов будут ссылаться в проекте (скажем: proj), который содержит необработанные шаблоны Razor.

Библиотека классов ссылается на сторонний компонент 3d (скажем, comp), который я не могу (с точки зрения лицензии) упаковать в библиотеку. Это не проблема, потому что proj всегда будет содержать ссылку на comp.

Однако внутри библиотеки мне нужно добавить comp к сборкам, на которые ссылаются:

 var outputAssemblyName = Path.GetTempPath()   Guid.NewGuid().ToString("N")   ".dll";
CompilerParameters compilerParameters = new CompilerParameters(ReferencedAssemblies, outputAssemblyName);
compilerParameters.ReferencedAssemblies.Add("System.dll");
compilerParameters.ReferencedAssemblies.Add("System.Core.dll");
compilerParameters.ReferencedAssemblies.Add("3dpartycomp.dll"); //<<<<<<<<<<<<
  

Однако библиотека DLL comp не найдена, когда она находится в папке /bin proj. Также у proj нет папки / release, потому что это веб-сайт.

Как мне добавить ссылку на компонент 3d party, когда он находится в проекте, в котором размещена библиотека?

Ответ №1:

При добавлении ссылки укажите полный путь к вашим сторонним сборкам (например, @»C:Appbin3rdpartycomp.dll «), поскольку компилятор просматривает только каталог framework (даже не GAC), когда указана ссылка без пути. Вы можете использовать сервер.MapPath для получения местоположения каталога bin.

Комментарии:

1. Этого можно было ожидать, однако выдается следующая ошибка: Строка: 0 Col: 0 Ошибка: файл метаданных ‘file:D:localTestSolutionTestProjectbin3dpartycomp.dll ‘ не удалось найти

2. Каким-то образом file: добавляется, когда я получаю путь к исполняемой сборке. Его удаление устранило проблему, отлично!

3. @Ropstah Могу я спросить вас, как вы удаляете часть «file: «?