VS2008.NET:如何使被引用项目的依赖项复制到主项目的bin文件夹中

6
假设我有一个C# Winforms项目MainGUI,它引用同一解决方案中的另一个项目ControlsLib。ControlsLib引用第三方控件套件(如Infragistics或Telerik控件),并公开了一组用户控件,这些控件在MainGUI中使用。
在ControlsLib中,所有引用的Copy Local都设置为true,并且所有第三方DLL都出现在ControlsLib\bin\release中。但是,我无法使第三方DLL自动复制到MainGUI\bin\release,这是生成软件安装程序的文件夹(在本例中使用NSIS)。
因此,在安装过程中,第三方控件DLL未被包含在内,导致在运行时使用依赖于第三方DLL的ControlsLib中的控件时出现FileNotFoundException。
是否有一种“正确”的方法可以解决这个问题,而我不知道?以前,我只是通过nAnt构建脚本来处理这个问题,但我正在启动一个新项目,我想检查一下。
谢谢
4个回答

2

我刚刚通过在MainGUI的.csproj文件中添加以下后构建事件命令行解决了这个问题(项目属性 -> 构建事件)。

copy $(SolutionDir)ControlsLib\bin\$(ConfigurationName)\Infragistics2*.dll $(TargetDir)

我之前并没有意识到那件事实际上如此容易...


0

您需要从UI项目(MainGUI)添加到必要文件的链接,并将它们设置为从那里复制到输出文件夹。内置的打包工具会正确地级联这些文件(如果我没记错的话),但对于外部工具,您可能需要手动完成。

在我的构建服务器上,我使用一个脚本来调查引用,并在构建之前添加所有后代引用(通过将csproj文件作为xml进行编辑)...代码不是很好,但它能够完成工作。


0

我在使用 Gentle.NET (O/R Mapper) 时遇到了类似的问题。其中一个 DLL 文件无法复制。我已经调查了几个小时,但是一直找不到原因。所有其他文件都被复制了,但是那个文件却因为某种奇怪的原因被排除在外。

Gentle 使用了三个 DLL 文件,分别是 Gentle.Common.DLL、Gentle.Framework.DLL 和 Gentle.SQLProvider.DLL。最后一个从来没有被复制过。

最终,我只好编写了一个脚本……


0
如果您在“发布”选项卡的主项目属性(可执行文件)上修改了应用程序文件选项,则可以告诉VS包括所有未被复制的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接