我正在开发PowerShell二进制模块.它使用Json.NET和其他库.我收到此异常“无法加载文件或程序集’Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed’或其中一个依赖项.系统找...

我正在开发PowerShell二进制模块.它使用Json.NET和其他库.
我收到此异常“无法加载文件或程序集’Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed’或其中一个依赖项.系统找不到指定的文件.”
在硬盘上我有它的更新版本(版本7.0.2)
这样的问题很容易在控制台,Web或桌面应用程序中解决,使用app.config或“web.config”通过这样的行
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
如何为PowerShell二进制模块做类似的事情?
解决方法:
在开发使用多个第三方库(Google API,Dropbox,Graph等)的PowerShell模块时,我自己遇到了这个问题,我发现以下解决方案最简单:
public static Assembly CurrentDomain_BindingRedirect(object sender, ResolveEventArgs args)
{
var name = new AssemblyName(args.Name);
switch (name.Name)
{
case "Microsoft.Graph.Core":
return typeof(Microsoft.Graph.IBaseClient).Assembly;
case "Newtonsoft.Json":
return typeof(Newtonsoft.Json.JsonSerializer).Assembly;
case "System.Net.Http.Primitives":
return Assembly.LoadFrom("System.Net.Http.Primitives.dll");
default:
return null;
}
}
注意在方法中,我有两种可能的方法来引用程序集,但它们都做同样的事情,它们强制使用该程序集的当前版本. (无论是通过类引用还是通过dll文件加载加载)
要在任何cmd中使用它,请在PSCmdLet的BeginProcessing()方法中添加以下事件处理程序.
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_BindingRedirect;
本文标题为:c# – PowerShell二进制模块程序集依赖性错误


基础教程推荐
- c#中利用Tu Share获取股票交易信息 2023-03-03
- C# – NetUseAdd来自Windows Server 2008和IIS7上的NetApi32.dll 2023-09-20
- 使用c#从分隔文本文件中插入SQL Server表中的批量数据 2023-11-24
- Unity shader实现多光源漫反射以及阴影 2023-03-04
- c#读取XML多级子节点 2022-11-05
- C#中类与接口的区别讲解 2023-06-04
- C# Winform实现石头剪刀布游戏 2023-01-11
- C#集合查询Linq在项目中使用详解 2023-06-09
- C#通过GET/POST方式发送Http请求 2023-04-28
- 京东联盟C#接口测试示例分享 2022-12-02