Ошибка при добавлении сборки из DLL в параметре компилятора C# Codedom

StackOverflow https://stackoverflow.com/questions/4191635

Вопрос

Я работаю над проектом AC# Codedom, который предоставляет пользователям динамически компилировать код C#. Я получаю ошибку при добавлении Assembly DLL WPF (он работает нормально для Winforms). Он говорит, что «не могу найти #### в сборке. Вам не хватает ссылки», когда я пытаюсь добавить ссылку, подобную «System.windows.Media». Но когда я добавляю ссылку по его пути DLL, например, «C: Program Files Research Assemblies Microsoft Framework v3.0 System.print Assemblies Microsoft Framework v3.0 System.printing.dll Не найден », но когда я размещаю System.printing.dll в папку исполняемой приложения, она работает нормально.

Ниже приведен код, который я использую, чтобы добавить ссылку на опцию компилятора:

CompilerParameters oParameters;
:
:
:
string lcAssemblyDll="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.Printing.dll";
oParameters.ReferencedAssemblies.Add(lcAssemblyDll);

Я не могу понять проблему. Также есть ли другой подход для добавления сборки WPF?

Спасибо

Это было полезно?

Решение

Что ж, я не могу дать тщательный ответ с макушки моей головы, но, прежде всего, вам нужно понять, что ссылка на компиляцию не то же самое, что способность разрешить сборку во время выполнения приложения. Поэтому, если эта ошибка была дана во время выполнения приложения, я могу представить, что она бросает исключения TypeloAder.

Во -вторых, вы, вероятно, получаете: «Нельзя найти #### в сборке. У вас не хватает некоторой ссылки», потому что базовые типы классов, от которых вы зависите, проживает в сборках, на которые ссылается System.windows.Media.

Вы можете попытаться решить эти добавления ссылок на сборки, которые загружаются во время сборки. Заказка о сборах, которые вы хотите упомянуть. Если вы добавите обработчик событий для Appdomain.currentDomain.ReflectionOnsemblyResolve, вы можете добавить код, который гарантирует, что эти сборки могут быть загружены, а затем просто добавить ссылки на кодекомпилеунит.

Я столкнулся с одной проблемой с этим, и это было то, что некоторые ссылки оптимизировались во время компиляции, поэтому я реализовал неприятный взлом, который просто добавляет класс контейнеров в кодекомпилеунит, который инициализации первого конструктивного типа, найденного в каждой из этих сборков.

Надеюсь, это немного поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top