Добрый день!
Имеется класс:
Классusing Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using System;
using System.Reflection;
namespace namespace1
{
public class AClass
{
public void Run(string Code)
{
// Формируем зависимости
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
ScriptOptions options = ScriptOptions.Default.AddReferences(assemblies);
// Запускаем скрипт
var result = CSharpScript.RunAsync(Code, options);
}
}
}
Всё просто: получаю сборки текущего домена -> копирую их в настройки скрипта -> выполняю скрипт.
Код, который пытаюсь передать в процедуру Run:
Кодstring code = @"using Excel = NetOffice.ExcelApi; "
+ @"Excel.Application ExcelApp = new Excel.Application(); ";
Как Вы заметили, в передаваемом коде я использую using. Который должен ссылаться на соотв. dll (NetOffice.ExcelApi).
В проекте данная ссылка присутствует:
К сути:
когда я получаю AppDomain.CurrentDomain.GetAssemblies(), то там соответственно нет сборки NetOffice. Как я понял, это связано с тем, что компилятор умный и не загружает те сборки, которые в коде не используются явно. Всё логично (это подтвердилось, когда я в код метода Run добавил строку:
NetOffice.ExcelApi.Application SomeVar = new NetOffice.ExcelApi.Application();
После, я решил, что буду принудительно подгружать dll в домен. Но выяснил, что при сборке проекта, эта dll не попадает в файлы сборки, хотя на них стоит свойство "Копировать локально".
В связи с этим несколько вопросов:
1) Возможно ли, принудительно заставить сборщик копировать неиспользуемые явно ссылки(dll) в релизную папку.
2) Можно ли, получить получить список всех Assemblies(может просто список имён) в коде, включая те, что не используются явно?
(приложение не ASP.NET) P.S.
В C# совершенный новичок. 100% где-то пока недопонимаю некоторые вещи. Прошу понять и простить :)
Буду благодарен, если посоветуете хорошие источники для прокачки скила в C#.