我有一个视觉工作室的解决方案。 我在解决方案中有许多项目。 有一个主要项目作为启动,并使用其他项目。 有一个项目叫“ProjectX”。其参考资料添加到主项目中。 ProjectX引用了另一个. net dll(例如abc.dll),它不是解决方案的一部分。
现在这个abc.dll应该被复制到主项目的bin/debug文件夹中,但它没有被复制到那里。为什么没有被复制,有什么已知的原因吗?
我有一个视觉工作室的解决方案。 我在解决方案中有许多项目。 有一个主要项目作为启动,并使用其他项目。 有一个项目叫“ProjectX”。其参考资料添加到主项目中。 ProjectX引用了另一个. net dll(例如abc.dll),它不是解决方案的一部分。
现在这个abc.dll应该被复制到主项目的bin/debug文件夹中,但它没有被复制到那里。为什么没有被复制,有什么已知的原因吗?
当前回答
我发现,如果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的回答。
其他回答
您可以将主项目和ProjectX的构建输出路径设置为相同的文件夹,然后您可以在该文件夹中获得所需的所有dll。
在代码中不需要dummy 只是:
向可执行项目添加引用
或/并确保在可执行项目中的引用有“复制本地”设置为TRUE(这是我的“错误”),似乎这“覆盖了”在基本引用库项目中的设置…
不确定这对我是否有帮助,但我多次引用DLL(当然会自动将其添加到bin文件夹中)。然而,DLL可能需要额外的DLL(取决于我使用的函数)。我不想在我的项目中引用那些,因为它们只需要在我实际使用的DLL相同的文件夹中结束。
我在Visual Studio中通过“添加一个现有文件”来实现这一点。您应该能够将它添加到除Add_data文件夹之外的任何地方。就我个人而言,我只是把它加到根上。
然后将该文件的属性更改为…
Build Action = None(将此设置为Content之类的内容实际上是将“根”版本复制到根,并在Bin中添加一个副本)。
复制到输出文件夹=如果更新则复制(基本上只在它丢失时才将其放在BIN文件夹中,但在那之后就不会这样做)
当我出版…我添加的DLL只存在于BIN文件夹中,而在发布位置(这是我想要的)中没有其他地方。
我发现,如果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的回答。
除了上述常见的解决方案,我还有一个多项目解决方案要发布。显然,一些文件针对不同的框架。
所以我的解决方案:属性>特定版本(假)