Json.Net可以嵌入到可执行文件中吗?

我将Netwonsoft.Json库的’Embed Interop Types’属性设置为true ,它返回一个错误:

 Cannot embed interop types from assembly 'c:\path\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute c:\path\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll 

它看起来像在Newtonsoft.Json库中寻找缺少的引用,但我不完全确定。 是否有可能将Json.Net嵌入到可执行文件中?

你没有说你正在使用哪种语言,但这里是你如何为C#做的


首先,关闭“嵌入互操作类型”

然后,到主可执行项目,卸载并编辑.csproj文件,并在以下行下面:

  

将此XML添加到项目文件中,保存并重新加载。

     %(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)    

然后,您将向主项目添加一个新的代码文件并向其添加以下代码(修改为适合您的应用程序的命名/结构化方式,在WPF应用程序中,放置它的好地方是App.xaml.cs ):

 [STAThread] public static void Main() { AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly; App.Main(); // Run WPF startup code. } private static Assembly OnResolveAssembly(object sender, ResolveEventArgs e) { var thisAssembly = Assembly.GetExecutingAssembly(); // Get the Name of the AssemblyFile var assemblyName = new AssemblyName(e.Name); var dllName = assemblyName.Name + ".dll"; // Load from Embedded Resources - This function is not called if the Assembly is already // in the same folder as the app. var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(dllName)); if (resources.Any()) { // 99% of cases will only have one matching item, but if you don't, // you will have to change the logic to handle those cases. var resourceName = resources.First(); using (var stream = thisAssembly.GetManifestResourceStream(resourceName)) { if (stream == null) return null; var block = new byte[stream.Length]; // Safely try to load the assembly. try { stream.Read(block, 0, block.Length); return Assembly.Load(block); } catch (IOException) { return null; } catch(BadImageFormatException) { return null; } } } // in the case the resource doesn't exist, return null. return null; } 

最后,确保将主应用程序的目标方法更新为刚刚添加的项目的主要方法

资料来源: http //www.paulrohde.com/merging-a-wpf-application-into-a-single-exe/