2012-11-06 114 views
2

我有一个项目“ProjA”包装引用到其他几个项目和一些“插件”程序集。所有这些引用都将“复制本地”设置为“真”。请注意,插件程序集中的代码(即项目引用)不直接在“ProjA”中引用,而是通过DI/Ninject加载和定位。 (所以我使用这些项目引用作为获取插件程序集到输出文件夹的方式,请参阅下面的原因)参考其他项目与复制本地上它的参考

我也有项目“ProjB”,它引用ProjA。它调用ProjA代码,它应该使用引用的插件程序集来完成这件事。

问题是,它不起作用。插件程序集不会从ProjA输出文件夹(它们被“复制到本地”)拷贝到ProjB输出文件夹中。所以Ninject不加载它们,并且失败。

所以我的两个问题:

  • 如果我口授给VS/MSBuild的是ProjA是指项目P1,P2,P3,P4,并设置复制本地为true - 为什么那么将它假设只有主输出组件需要使ProjA工作?我能否以不同的方式思考?
  • 我猜测,添加一个复制本地引用插件程序集作为VS认识插件和使用它们的项目之间的构建依赖关系(目前是一组固定的插件,因此这条路线) - 不是理想。然后,我认为将插件程序集作为“内容”添加到项目中可行,但接下来我有两个问题:1)TFS源代码管理;插件项目需要一个可写目标来构建,据推测 - 内容文件将被“签入”,2)一些插件拥有自己的内容:引用我不需要担心丢失某些东西。去内容路线我需要参考另一个项目的构建输出文件夹,包括它的所有内容,但不是PDB ......看起来更加黑客!

我也考虑过并且为插件项目进行了构建后步骤(不理想:我将它们从另一个拉入到这个新解决方案中,如果我添加后构建步骤,它可能会搞砸其他解决方案)或依赖于它们的项目(这是可以的,但是具有相对路径的XCopy,并且必须手动设置Project Dependencies ..似乎更加黑客)。

有什么我想念,任何想法?如果复制本地链接跨项目引用它将完全适合..

+0

做了一些更多的研究,似乎构建到单个输出文件夹是关键。尽管我是为“其他”解决方案做的,但插件主要在这个解决方案中。那么,如何将这些项目构建到一个* new *'single'输出文件夹中,用于此解决方案? –

回答

0

不可能与Visual Studio或msbuild似乎。

-2

复制local = true是所有VS邪恶的来源。那么,至少最。

我只想说 - 不要使用它。有一个不错的outputdir,比如T:\ Bin,并且使用后期构建脚本将所需的所有内容复制到该目录中。并从那里跑。 不要只是把你的信任放在VS上,像盲鼠一样走动。

您也可以考虑使用GAC。

+0

错过了我为什么不能使用单个输出文件夹的评论? –

+0

..和项目的后构建脚本将无法工作,因为项目是在多个解决方案? –

+0

这两条评论对我来说都不清楚。发布版本只是成功构建时执行的脚本。他们可能会或可能不会使用项目特定的参数S.A $ {ProjectDir}。 – avishayp