ссылка на некомпилированный класс C # - PullRequest
2 голосов
/ 21 сентября 2009

Это может быть странный вопрос.

Мне нужно позднее связать нескомпилированный класс C # (.cs). Даже не уверен, возможно ли это. Класс не будет частью проекта или ссылками. Единственное, что я узнаю об этом, - это местоположение файла.

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

Возможно ли это вообще?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 21 сентября 2009

Вы не спрашивали о компиляции, поэтому я предполагаю, что вы просто хотите создать экземпляр класса и использовать его.

Вы должны заставить класс реализовать интерфейс, охватывающий необходимую вам функциональность, а затем создать его экземпляр, используя Класс активатора :

ObjectHandle fooHandle = Activator.CreateInstanceFrom(
   @"C:\somePath\FooAssembly.dll", "FooNamespace.Foo");
IFoo foo = (IFoo)fooHandle.Unwrap();

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

1 голос
/ 21 сентября 2009

Звучит так, как будто вы хотите скомпилировать и ссылаться на ваш класс во время выполнения. Это определенно возможно.

Эта статья должна указать вам правильное направление ... http://support.microsoft.com/kb/304655

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

0 голосов
/ 21 сентября 2009

Вы можете использовать классы CodeProvider

CodeDomProvider cdp = Microsoft.CSharp.CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults cr = cdp.CompileAssemblyFromFile(<CompilerParameters>,<string [] of files to compiler>);

просто замените на нужный вам объект и со строковым массивом фактических имен файлов.

вы также можете загрузить код в строку и скомпилировать прямо оттуда

Полученную сборку затем можно найти в

cr.CompiledAssembly
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...