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

2023-11-23

我设置了“嵌入互操作类型”属性Netwonsoft.Json图书馆到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 文件,并在以下行下方添加:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

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

 <Target Name="AfterResolveReferences">
  <ItemGroup>
    <EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'">
      <LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName>
    </EmbeddedResource>
  </ItemGroup>
</Target>

然后,您将向主项目添加一个新的代码文件,并向其中添加以下代码(进行修改以适应您的应用程序的命名/结构,在 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;
}

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

Source: http://www.paulrohde.com/merging-a-wpf-application-into-a-single-exe/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Json.Net 可以嵌入到可执行文件中吗? 的相关文章

  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我

随机推荐

  • 导入Android平台类的问题

    我是安卓新手 似乎有太多的问题只是让 Eclipse 和 SDK 设置一切都在它应该在的地方 我一直在研究 Android 开发者网站上的一个示例 但它抛出一个错误 导入android support无法解决 我正在尝试导入以下内容 imp
  • HTML 选择“完成”标签未显示在 iOS 版 Ionic 上

    我正在使用 Ionic 框架构建一个 iOS 应用程序 当我使用 select elements 时 在 iOS 原生的菜单中选择项目时 我没有获得带有 完成 标签的标题 然而 当我在 iOS Safari 中使用该应用程序时 它会出现 附
  • 自动绘制不同颜色的线条

    我试图在同一张图上绘制几个核密度估计 并且我希望它们都是不同的颜色 我有一个使用字符串的拼凑解决方案 rgbcmyk 并针对每个单独的图逐步执行它 但在 7 次迭代后我开始出现重复 有没有更简单 更有效的方法来做到这一点 并且有更多的颜色选
  • SQL 错误:“无法在用户实例中使用全文搜索。”

    作为构建过程的一部分 我使用 SSEUtil 根据源自我的开发数据库 SQL Server 2008 R2 的架构自动创建功能测试数据库 这使我能够保持两个数据库同步 模式方面 而无需针对我的开发数据库运行 SQL 存储库测试 我最近在我的
  • 圆形左侧 CSS [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我目前正在尝试使用 CSS 实现以下效果 不幸的是 我的努力未能尝试修改代码以使其稍微正确 任何帮助将不胜感激 您可以使用border radius仅在两个左角上并分别组合两个值 如本例所
  • 使用 MessageCard 通过 MS Teams 中的传入 Webhook @mention

    我在 Cherwell 中有一个步骤 它根据条件触发 Web 服务并将 MessageCard 发送到 MS Teams 中的通道 当消息到达频道时 我找不到触发 提及的方法 在当前的 WFH 中 所有技术人员都在 Teams 中 并且没有
  • github/git Checkout 在 Windows 上返回“错误:无效路径”

    当我尝试从 github 签出存储库时 出现错误 error invalid path configs perl modules DIST 64 perl HTML Tree 1 5 03 1 el6 noarch rpm 我怀疑问题是路径
  • 有没有办法使用 Kotlin 的暴露库运行原始 sql

    我正在尝试运行一些特定于 postgres 的 sql 并希望重用 Exposed 中的事务管理 暴露的有Transaction exec String 方法可能会做你想要的 看https github com JetBrains Expo
  • 模态对话框不关闭键盘

    我遇到了一个问题 即离开时键盘不会消失UITextField or UITextView in a UIModalPresentationFormSheet 此外 我创建了一个大按钮作为视图的背景 因此如果用户点击字段外部 它就会被触发 我
  • C++ 枚举是有符号的还是无符号的?

    C 枚举是有符号的还是无符号的 通过扩展 通过检查输入是否 您的最小值 假设您从 0 开始并增加 1 来验证输入是否安全 让我们追根溯源 以下是 C 03 标准 ISO IEC 14882 2003 文档 7 2 5 枚举声明 中的内容 枚
  • Android:在没有 Activity 或 Context 引用的情况下访问资源

    我发布这个问题是希望能得到某种明确的答案 如果没有活动或上下文引用 真的不可能访问资源吗 当所需的只是访问一些与 UI 无关的值 资产或字符串时 传递此类引用会导致代码过于复杂 加上所有那些潜在的悬挂参考 这也完全破坏了各种设计模式 例如单
  • 对于 i = 0,为什么 (i += i++) 等于 0?

    获取以下代码 可用作控制台应用程序 static void Main string args int i 0 i i Console WriteLine i Console ReadLine 的结果i是 0 我预计是 2 正如我的一些同事所
  • “异常:t 实例化期间出错!主插座已注册。”在科尔多瓦 Angular2 应用程序中

    我正在用我的项目构建一个简单的科尔多瓦应用程序 它有 2 层嵌套 主路由 gt 子路由 gt 另一个子路由 When trying to browse to the 2nd level another child route 我收到一条错误
  • Chrome 中检测浏览器打印事件有两种不同的方式

    我目前使用的是最新版本的 Chrome 43 0 2357 130 并且在从以下位置调用 print 时遇到打印功能的差异window print 与使用 P 相比 打印时使用window print 它正确输出到控制台 它输出Before
  • WPF FlowDocument - 绝对字符位置

    我有一个 WPF RichTextBox 我正在其中输入一些文本 然后解析整个文本以进行处理 在此解析过程中 我获得了每个单词的开头和结尾的绝对字符位置 我想使用这些字符位置对某些单词应用格式 但是 我发现 FlowDocument 使用
  • 将 Dictionary 转换为匿名对象?

    首先 为了让事情更清楚 我将从顶部解释我的场景 我有一个具有以下签名的方法 public virtual void SendEmail String from List
  • 如何删除包含 GridView 的空 div

    在 ASP NET Gridviews 中生成一个表 该表生成一个父 div 容器 这可能会破坏 CSS 布局 因为无法将样式附加到生成的 div 有没有办法阻止 div 生成或对其应用样式 已询问此问题并标记为已解决here但MS只是说d
  • 在 main() 之外处理 argc 和 argv

    如果我想将用于处理命令行参数的大部分代码保留在 main 之外 以便组织和更具可读性的代码 那么最好的方法是什么 void main int argc char argv lots of code here I would like to
  • 引用没有强名称的程序集

    有没有办法在没有强名称的情况下引用库 当我在引用中添加对程序集的引用并重建解决方案时 一切都很好 但是当我从此程序集解决方案调用该类时 它不会构建 输出表明引用的程序集应该具有强名称 最好的解决方案是什么 强命名库并不可取 我认为您遇到的问
  • Json.Net 可以嵌入到可执行文件中吗?

    我设置了 嵌入互操作类型 属性Netwonsoft Json图书馆到true它返回一个错误 Cannot embed interop types from assembly c path packages Newtonsoft Json 9