var assembly = AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().Location);
var appDomain = System.Threading.Thread.GetDomain();
var assemblyBuilder = appDomain.DefineDynamicAssembly(assembly, AssemblyBuilderAccess.Run);
// Load the assembly to the reflection context to check for any conflicts in the assembly load context
Assembly assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
AssemblyName assemblyName = assembly .GetName();
List<AssemblyName> existingAssemblies = AppDomain.CurrentDomain
.GetAssemblies()
.Select(assembly => assembly.GetName())
.Where(x => x.Name == assemblyName.Name && x.Version.ToString() != assemblyName.Version.ToString())
.ToList();
if (existingAssemblies.Any())
{
// Skip the assembly if there are already assemblies with the same name but a different version
return;
}
else
{
// Load the assembly into the assembly loader context
assembly = Assembly.LoadFrom(assemblyPath);
}
5条答案
按热度按时间sc4hvdpw1#
找到一个有效的答案here:
请查看菜单工具-〉选项〉调试〉启用使用托管兼容模式,然后调试您的转储文件,结果如何?
不知道为什么它能工作,然后突然停止了。但是,它现在又能工作了。
在以下时间之后编辑很长时间:
这个最近得到了一个赞成票,所以问题仍然存在,潜伏着。我应该补充说,在这个解决方案解决了问题后,它很快又回来了,我不能尝试摆脱它。我最终完全删除了所有的痕迹,并重新安装它,这几乎花了一整天。
在以下时间之后编辑LONG LONG:
即使在卸载和重新安装VS之后,问题最终还是出现了。这次我把我的笔记本电脑带到我雇主的服务台团队,他们最终只是给了我一台新的笔记本电脑。
如果这对你来说不是一个选择,愿上帝帮助你,因为我不知道。我在各种微软论坛上找到了一些关于这方面的帖子,微软员工总是用“无法复制”来关闭它们。
dgtucam12#
我也在下面的代码后面遇到了这个问题:
最后我明白了,只有在传递执行程序集(通过调用Assembly.GetExecutingAssembly()接收)时才会发生这种情况。我假设编译器不知道如何在这种情况下调试执行程序集(可能是因为这导致了这些程序集之间的冲突)。
溶解:不使用执行程序集
5anewei63#
我也遇到了这个问题。
结果是我有两个using语句从特定的名称空间定义了一个类型。
在我的公司之外,这可能很少发生,但如果您遇到这种错误,则需要考虑。
pinkon5k4#
我在VS2022中的一个Web项目中遇到了这个问题,回滚到VS2019,打开托管兼容性模式,仍然有错误。原来这只是我的臭代码。
我在一个启动例程中有这个。一旦调试器命中第三行代码,我就开始得到错误。我可以检查变量直到那一行。
nuypyhwy5#
在我的例子中,这是由于动态程序集加载。
只有在调试器跳过对
Assembly.LoadFrom(...)
方法的调用(该方法试图加载与程序集加载器上下文中的程序集同名的程序集)后,才会出现此问题。我通过检查要加载的程序集是否已经在程序集加载器上下文中修复了这个问题。如果已经在程序集加载器上下文中,则跳过该程序集。
我的解决方案的粗略代码:
参考文献:
Strange behavior when loading assemblies and its dependencies programatically
https://github.com/dotnet/runtime/issues/10859
https://github.com/dotnet/roslyn/issues/19257