C# 找不到类型。它可能需要装配鉴定,例如;MyType,MyAssembly“;
我有一个.NET核心项目,我是通过dotnet构建的。然后我在构建之后进行dotnet存储和dotnet发布。“Test.dll”在运行时包存储中生成,之后在发布文件夹中生成。当我运行“dotnet MyProject.dll”时,我在builder.Build()期间遇到一个异常: System.InvalidOperationException:找不到类型“TestModule,Test”。它可能需要装配鉴定,例如“MyType,MyAssembly” MyJsonFile.jsonC# 找不到类型。它可能需要装配鉴定,例如;MyType,MyAssembly“;,c#,.net,autofac,C#,.net,Autofac,我有一个.NET核心项目,我是通过dotnet构建的。然后我在构建之后进行dotnet存储和dotnet发布。“Test.dll”在运行时包存储中生成,之后在发布文件夹中生成。当我运行“dotnet MyProject.dll”时,我在builder.Build()期间遇到一个异常: System.InvalidOperationException:找不到类型“TestModule,Test”。它可能需要装配鉴定,例如“MyType,MyAssembly” MyJsonFile.json {
{
"modules": [
{
"type": "TestModule, Test",
"properties": {
"PluginInstanceNames": [ "Test" ]
}
}
]
}
MyProject.cs
var configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("MyJsonFile.json");
var configModule = new ConfigurationModule(configBuilder.Build());
builder = new ContainerBuilder();
builder.RegisterModule(configModule);
builder.Build();
为什么它不从运行时包存储中的.json文件中搜索模块?它是如何工作的
只有当我添加了这个回调函数时,它才会工作,其中“path”是字符串数组,带有指向运行时存储文件夹和发布文件夹的路径
AssemblyLoadContext.Default.Resolving += (context, name) =>
{
var dll = Array.Find(path, f => f.EndsWith(name.Name + ".dll"));
if (dll == null)
{
return null;
}
Assembly assembly = context.LoadFromAssemblyPath(dll);
return assembly;
}
Autofac不负责程序集加载,.NET framework负责。在.NET Core中加载程序集与在桌面上加载经典的.NET framework不同,正如您所看到的,它确实需要额外的工作。解释,;我们有一个很好的解决方案,但它的长短是:您需要自己使用
AssemblyLoadContext
,就像加载插件一样