Подскажите пожалуйста, как исправить код ниже (c# winforms vs2010). Сейчас выдает ошибку "Не удалось загрузить файл Newtonsoft.Json.dll".
При этом файл exe после компиляции по размеру включает этот dll. Newtonsoft.Json.dll добавлен в проект, копировать локально=false.
Файл dll загружен из https://json.codeplex.com/releases (взят из папки bin/net40). Выбрано: копировать в выходной каталог=не копировать, действие при построении=внедренный ресурс. Использую:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Reflection;
namespace Demo
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
Application.Run(new Form1());
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EmbedAssembly.Newtonsoft.Json.dll"))
{
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Reflection;
using Newtonsoft.Json;
namespace Demo
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;
Application.Run(new Form1());
}
private static Assembly OnResolveAssembly(object sender, ResolveEventArgs e)
{
var thisAssembly = Assembly.GetExecutingAssembly();
var assemblyName = new AssemblyName(e.Name);
var dllName = assemblyName.Name + ".dll";
var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(dllName));
if (resources.Any())
{
var resourceName = resources.First();
using (var stream = thisAssembly.GetManifestResourceStream(resourceName))
{
if (stream == null) return null;
var block = new byte[stream.Length];
try
{
stream.Read(block, 0, block.Length);
return Assembly.Load(block);
}
catch (Exception)
{
return null;
}
}
}
return null;
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нашёл пример как можно по частям собирать linq запросС помощью класса predicateBuilder
Появляется ошибка при запуске ConsoleApp2exe на Debian x86
Есть проблема при работе с SaveFileDialogПо задумке, при сохранении файла вывожу модальное окно с текстом "Успешно сохранено", в противном случае...
Недавно заинтересовался разработкой игр, очень понравился движок unity и решил изучать егоДля начала решил ознакомится с c# (по сайту mesharp