Фон: Я работаю над очень большим сюитом, который содержит около 12 различных суб-приложений. Моя цель - взять одно из этих подзадач и создать свой собственный исполняемый файл со всеми DLL-файлами, встроенными в EXE-файл. До сих пор я мог внедрить большинство DLL с помощью следующих шагов:System.IO.FileNotFoundException, возникающий в mscorlib.dll?
1) Добавьте библиотеки DLL в проект в локальной папке и установите их в «Встроенные ресурсы».
2) Добавить эти библиотеки DLL на вкладке Ссылки и установите копию локального свойства в Ложный
3) Добавить эти библиотеки DLL в Resources.resx файл
Я также создал новый файл Program.cs и установите точку входа в основную функцию, расположенную в желаемом сборочном узле. Моя проблема заключается в том, что DLL-файл, который используется для запуска всего пакета, не может быть встроен в EXE из субприложения, потому что я продолжаю получать исключение System.IO.FileNotFoundException в файле mscorlib.dll с фреймом стека, установленным в System.AppDomain.ExecuteAssembly , Однако я могу полностью исключить это исключение: я установил для свойства «Suite.dll» Copy Local значение true.
Вот мой обработчик обработчика сборки, но он никогда не попадает, поскольку исключение происходит в управляемом коде до того, как функция Main даже выполнена.
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
string resourceName = new AssemblyName(args.Name).Name+".dll";
string resource = Array.Find(this.GetType().Assembly.GetManifestResourceNames(), element => element.EndsWith(resourceName));
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
Можно ли это предотвратить? Как мне разрешить эту зависимость, чтобы я мог встраивать свой DLL-файл в свой подэкран EXE? Прошу прокомментировать, если требуется дополнительная информация, и я отредактирую вопрос. Благодаря!
Можете ли вы привести пример? Я думаю, что вижу вашу точку зрения, но я смущен, как это будет работать, потому что функция Main() никогда не вызывается до того, как произойдет исключение (проверяется путем размещения точки останова в начале функции). – LaneL
Ваша точка останова ничего не проверяет. Прокомментируйте все, кроме привязки сборки, и оно будет волшебным образом достигнуто. – Joshua
Спасибо, Джошуа, я ценю это. – LaneL