#.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: «?