假设我有一个C#Winforms项目,MainGUI。
它引用了同一解决方案ControlsLib中的另一个项目。
ControlsLib引用第三方控件套件,例如Infragistics或Telerik控件,并公开一组在MainGUI中使用的用户控件。
在ControlsLib中的所有引用上将Copy Local设置为true,并且所有第三方DLL都显示在ControlsLib \ bin \ release中。
但是我无法将第三方DLL自动复制到MainGUI \ bin \ release,这是生成软件安装程序的文件夹(在本例中使用NSIS)
因此第三方控件DLL不会包含在安装中,这会在运行时导致FileNotFoundException,因为来自ControlsLib的控件依赖于第三方DLL。
有没有一种“正确”的方法可以做到这一点,我不知道?以前我只是通过复制文件在一个非常的构建脚本中处理这个,但我正在开始一个新项目,我只想检查。
由于
答案 0 :(得分:2)
我刚刚通过将以下post build事件命令行添加到MainGUI的.csproj文件(项目属性 - >构建事件)来解决这个问题
copy $(SolutionDir)ControlsLib\bin\$(ConfigurationName)\Infragistics2*.dll $(TargetDir)
我没有意识到这样做真的很容易......
答案 1 :(得分:0)
您需要从UI项目(MainGUI)添加指向必要文件的链接,并将它们设置为从那里复制到输出文件夹。内置的打包工具(IIRC)正确地级联这些,但对于外部工具,我希望你需要手动完成。
在我的构建服务器上,我使用一个调查引用的脚本,并在构建它之前添加所有后代引用(通过将csproj文件编辑为xml)...代码不是很好,但它确实工作
答案 2 :(得分:0)
我使用Gentle.NET(O / R Mapper)遇到了类似的问题。其中一个DLL拒绝复制。我已经调查了几个小时,一直无法找到原因。正在复制所有其他文件,但出于某些奇怪的原因排除了那个一个文件。 温柔地使用了三个DLL,Gentle.Common.DLL,Gentle.Framework.DLL和Gentle.SQLProvider.DLL。最后一个永远不会被复制。
最后我简单地制作了一个剧本......
答案 3 :(得分:0)
如果您在选项卡Publish,选项Application Files上修改主项目属性(可执行文件属性),那么您将能够告诉VS包含所有未被复制的文件。