我有一个视觉工作室的解决方案。 我在解决方案中有许多项目。 有一个主要项目作为启动,并使用其他项目。 有一个项目叫“ProjectX”。其参考资料添加到主项目中。 ProjectX引用了另一个. net dll(例如abc.dll),它不是解决方案的一部分。

现在这个abc.dll应该被复制到主项目的bin/debug文件夹中,但它没有被复制到那里。为什么没有被复制,有什么已知的原因吗?


当前回答

TLDR;Visual Studio 2019可能只是需要重新启动。

我在使用基于Microsoft.NET.Sdk项目的项目时遇到了这种情况。

<Project Sdk="Microsoft.NET.Sdk">

具体地说:

Project1: targets.netstandard2.1 通过Nuget引用Microsoft.Extensions.Logging.Console projec2: targets.netstandard2.1 通过项目引用引用Project1 Project2Tests: targets.netcoreapp3.1 通过项目引用引用Project2

在测试执行时,我收到了错误消息,指出无法找到Microsoft.Extensions.Logging.Console,并且它确实不在输出目录中。

我决定通过将Microsoft.Extensions.Logging.Console添加到Project2中来解决这个问题,结果发现Visual Studio的Nuget Manager并没有列出安装在Project1中的Microsoft.Extensions.Logging.Console,尽管它存在于Project1中。csproj文件。

简单地关闭并重新启动Visual Studio就解决了这个问题,而不需要添加额外的引用。也许这将为某人节省45分钟的生产力损失:-)

其他回答

我发现,如果ProjectX引用了abc.dll,但没有直接使用abc.dll中定义的任何类型,那么abc.dll将不会被复制到主输出文件夹。(它将被复制到ProjectX输出文件夹,以使它更加混乱。)

因此,如果在ProjectX的任何地方都没有显式地使用abc.dll中的任何类型,那么在ProjectX的某个文件中放置一个伪声明。

AbcDll.AnyClass dummy006; // this will be enough to cause the DLL to be copied

您不需要对每个类都这样做——只需一次就足以使DLL复制和一切正常工作。

附录:注意,这可能适用于调试模式,但不适用于发布模式。详见@nvirth的回答。

不确定这对我是否有帮助,但我多次引用DLL(当然会自动将其添加到bin文件夹中)。然而,DLL可能需要额外的DLL(取决于我使用的函数)。我不想在我的项目中引用那些,因为它们只需要在我实际使用的DLL相同的文件夹中结束。

我在Visual Studio中通过“添加一个现有文件”来实现这一点。您应该能够将它添加到除Add_data文件夹之外的任何地方。就我个人而言,我只是把它加到根上。

然后将该文件的属性更改为…

Build Action = None(将此设置为Content之类的内容实际上是将“根”版本复制到根,并在Bin中添加一个副本)。

复制到输出文件夹=如果更新则复制(基本上只在它丢失时才将其放在BIN文件夹中,但在那之后就不会这样做)

当我出版…我添加的DLL只存在于BIN文件夹中,而在发布位置(这是我想要的)中没有其他地方。

将DLL作为现有项添加到其中一个项目中,应该对其进行排序

VS2019 V16.6.3

对我来说,问题是主.proj文件最终以这样的项目入口结束,其DLL没有被复制到父项目bin文件夹:

<ProjectReference Include="Project B.csproj">
  <Project>{blah blah}</Project>
  <Name>Project B</Name>
  <Private>True</Private>
</ProjectReference>

我手动删除了一行<Private>True</Private>,然后在主项目的每次构建时将DLL复制到主项目bin文件夹。

如果您转到主项目的参考文件夹中的问题项目的参考,单击它并查看属性,其中有一个“本地复制”设置。私有标记等同于这个设置,但对我来说,出于某种原因,更改本地复制对.proj文件中的私有标记没有影响。

令人恼火的是,我没有更改引用的复制本地值,不知道它是如何设置的,又浪费了一天追踪VS的愚蠢问题。

感谢所有其他帮助我了解原因的答案。

HTH

确保您使用的依赖DLL的目标. net框架不高于项目应用程序的目标. net框架。

你可以通过选择你的项目来检查,然后按ALT+ENTER,然后从左边选择Application,然后选择项目的目标框架。

假设, 依赖DLL目标框架= 4.0和 应用程序DLL目标框架= 3.5然后将其更改为4.0

谢谢你!