我正在将.NET应用程序迁移到.NET Core,该应用程序需要执行的任务之一是枚举.NET全局程序集缓存中的程序集(是,我知道我 .NET Core应用程序本身不使用GAC,但是我的应用程序的目的之一是创建完整.NET Framework GAC中内容的清单。)
我尝试在Fusion.dll
中P / Invoke的任何方法都会给我同样的错误:
未处理的异常: System.DllNotFoundException :无法加载DLL 'Fusion.dll'或其依赖项之一:指定的模块可以 找不到。 (来自HRESULT的异常:0x8007007E)
代码示例:
class Program
{
static void Main(string[] args)
{
GacUtility.CreateAssemblyCache(out var x, 0);
}
}
public class GacUtility
{
[DllImport("Fusion.dll")]
public static extern int CreateAssemblyCache(out object asmCache, int reserved);
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
</Project>
NB:我知道正确的签名CreateAssemblyCache
会期望IAssemblyName
和I have that right in my code,这给了我同样的错误。我在上面使用object
来简化可重现的示例。
答案 0 :(得分:0)
将平台更改为x64,并指定dllImport的完整路径,以及对IntPtr而不是对象的签名对我来说都是有效的,
class Program
{
static void Main(string[] args)
{
GacUtility.CreateAssemblyCache(out IntPtr x, 0);
}
}
public class GacUtility
{
[DllImport(@"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\fusion.dll")]
public static extern int CreateAssemblyCache(out IntPtr asmCache, int reserved);
}
但是,对于x86来说,奇怪的是没有