.net MSBuild错误:“0”;无法解析此引用。找不到程序集…“;

.net MSBuild错误:“0”;无法解析此引用。找不到程序集…“;,.net,visual-studio-2015,msbuild,.net,Visual Studio 2015,Msbuild,我知道已经有一个问题询问了完全相同的错误消息,但不幸的是,接受的答案不适合我 今天早上早些时候,我成功构建了当前解决方案,但构建在大约15分钟前突然开始失败,并显示以下错误消息: C:\程序文件 (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): 警告MSB3245:未能解析此引用。找不到 程序集“MyAssembly.dll”。检查以确保该程序集存在 在磁盘上。如果您的代码需要此引用,您可以 编译错误

我知道已经有一个问题询问了完全相同的错误消息,但不幸的是,接受的答案不适合我

今天早上早些时候,我成功构建了当前解决方案,但构建在大约15分钟前突然开始失败,并显示以下错误消息:

C:\程序文件 (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): 警告MSB3245:未能解析此引用。找不到 程序集“MyAssembly.dll”。检查以确保该程序集存在 在磁盘上。如果您的代码需要此引用,您可以 编译错误

不幸的是,我的代码需要这个DLL。因为无法定位,所以我的解决方案无法编译

我尝试过清理,然后再次构建我的解决方案,但那是无用的

我注意到该引用旁边有一个黄色图标,因此我删除了该引用,然后从我的
.csproj
文件中
标记内指定的完全相同的位置再次添加它。(位置是
\bin\Debug
文件夹。)黄色图标随后消失

但是,在我单击“生成解决方案”(在
调试
模式下)后,黄色图标再次出现,我再次看到相同的MSBuild错误消息,通知我无法找到DLL


如何解决此问题?

将项目引用添加到
MyAssembly
项目,而不是对已编译输出的引用。右键单击需要
MyAssembly.dll
的项目的引用节点,转到“添加引用”,然后选择“解决方案”:


假设您有两个项目(X和Y),其中Y取决于X。VisualStudio将首先构建X,然后构建Y

可以通过以下两种方式之一添加对Y中X的引用:

  • 在解决方案中引用项目
  • \bin\Debug
    文件夹中引用编译后的输出
如果引用是解决方案中的项目,那么VisualStudio将知道编译项目的顺序(在我们的示例中是X,然后是Y)


如果引用是指向
\bin\Debug
中的输出,则Visual Studio将不知道编译程序集的顺序,并且可以尝试在X之前编译Y,在
\bin\Debug
中找不到文件,然后不编译。

相同的问题,不同的解决方案:

我的解决方案由一个dll项目和一个exe测试项目组成。 VS以某种方式将启动项目更改为dll。 右键单击您的解决方案, 选择属性,
检查启动项目和项目依赖项设置。

我的问题被深埋了3层。这个答案帮助我找到了它。