最近我开始随机收到这条消息:
在Visual Studio中找不到元数据文件'...\Release\project.dll'
我有一个包含几个项目的解决方案.当前的构建模式是Debug,所有项目的配置都设置为Debug.但是当我尝试运行主项目时 - 有时它会给我一些错误,所有这些都是"元数据文件'...\Release\projectX.dll'找不到" - 而且,看,它说的是关于RELEASE文件夹,虽然当前模式是Debug.为什么?我试图在所有解决方案文件中搜索"Release\projectX.dll"的引用,我在ResolveAssemblyReference.cache文件中找到了一个.
我通过互联网进行了很好的搜索,发现了一些有类似问题的人,但没有解决方案,或者至少没有可行的解决方案.
我试图删除对这些项目的引用并阅读它们,但有一段时间我又开始重新获得这些错误.
这似乎是个bug.当我总是使用调试模式时,为什么要在Release文件夹中搜索引用的项目?
PS.对于那些遇到这个问题的人:我无法轻易解决它.它重新安装Windows后才消失:(
我想弄清楚这个文件是什么(或者更确切地说,这些文件是).
我发现了一些提到它的网页,但问题的答案总是像"这个文件不是你的问题" - 没有描述文件是什么.我也没有在MSDN上看到过明显的页面.
文件本身非常大,而不是纯文本(尽管它们有很多文本).我猜它只是在编译期间使用的东西,虽然修改日期比我的任何目标文件都要旧.这与*.pdb文件或调试有关吗?
这是设置:
纯粹的DotNET类库由非托管桌面应用程序加载.类库充当插件.这个插件加载了自己的小插件(所有DotNET类库),它通过将dll作为字节流读入内存来实现,然后
Assembly asm = Assembly.Load(COFF_Image);
Run Code Online (Sandbox Code Playgroud)
当那些小宝贝插件引用其他dll时会出现问题.由于它们是通过内存而不是直接从磁盘加载的,因此框架通常无法找到这些引用的程序集,因此无法加载它们.
我可以在我的项目中添加一个AssemblyResolver处理程序,我可以看到这些引用的程序集已经过去了.我对在磁盘上找到这些引用程序集的位置有一个相当好的想法,但是如何确保Assmebly I load是正确的?
简而言之,我如何可靠地从System.ResolveEventArgs.Name字段转到dll文件路径,假设我有一个这个dll可能隐藏的所有文件夹的列表?
我想描述和调整我们的构建希望在这里和那里节省几秒钟.我能够创建一个派生自ResolveAssemblyReferences的任务并使用它,但我在理解以下内容时遇到了问题(来自Microsoft.Common.targets):
<!--
============================================================
ResolveProjectReferences
Build referenced projects:
[IN]
@(NonVCProjectReference) - The list of non-VC project references.
[OUT]
@(_ResolvedProjectReferencePaths) - Paths to referenced projects.
============================================================
-->
<Target
Name="ResolveProjectReferences"
DependsOnTargets="SplitProjectReferencesByType;_SplitProjectReferencesByFileExistence">
<!--
When building this project from the IDE or when building a .SLN from the command-line,
just gather the referenced build outputs. The code that builds the .SLN will already have
built the project, so there's no need to do it again here.
The ContinueOnError setting is here so that, during project …Run Code Online (Sandbox Code Playgroud)