Tfs Team Build 2010-第三方程序集引用未复制到输出文件夹

Tfs Team Build 2010-第三方程序集引用未复制到输出文件夹,tfs,msbuild,tfsbuild,assemblies,Tfs,Msbuild,Tfsbuild,Assemblies,当我在构建服务器上构建解决方案时,它会生成一个二进制文件文件夹,然后将这些二进制文件复制到最终的输出文件夹。在我的例子中,一些第三方部件参照被正确复制,而其他第三方部件参照没有被复制。不要以为我的解决方案项目不会直接引用正在复制的程序集 这意味着一切都很好。但当我运行程序时,它不会启动,因为它引用的程序集不能依次加载它们的引用 生成中的哪个进程决定将哪些程序集复制到binaries文件夹?有没有办法指定它应该复制所有程序集 编辑:一种可能的解决方案是只引用解决方案中某个项目中的所有必需程序集,但

当我在构建服务器上构建解决方案时,它会生成一个二进制文件文件夹,然后将这些二进制文件复制到最终的输出文件夹。在我的例子中,一些第三方部件参照被正确复制,而其他第三方部件参照没有被复制。不要以为我的解决方案项目不会直接引用正在复制的程序集

这意味着一切都很好。但当我运行程序时,它不会启动,因为它引用的程序集不能依次加载它们的引用

生成中的哪个进程决定将哪些程序集复制到binaries文件夹?有没有办法指定它应该复制所有程序集


编辑:一种可能的解决方案是只引用解决方案中某个项目中的所有必需程序集,但这会变得非常混乱。

请做一件事,将第三方dll添加到您的bin文件夹中,并引用bin文件夹中的该dll


然后构建解决方案并提交结果。这将复制bin文件夹中的第三方DLL。

对于ASP.NET项目,有一种内置机制。确保所需的程序集位于名为_bin_deployableAssemblies的项目下的文件夹中,并且它们将被自动复制。要查看此自定义如何连接到Web项目的构建中,请查找文件

%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets
并查看CopyBinDeployableAssemblies目标。在同一个文件中,您可以看到它是这样引用的

<PropertyGroup>
  <PrepareForRunDependsOn>
    $(PrepareForRunDependsOn);
    CopySilverlightApplications;
    _CopyBinDeployableAssemblies;
  </PrepareForRunDependsOn>
  ...

美元(准备独立开支);
复制应用程序;
_CopyBindeployableassembles;
...

您可以对任何项目执行类似的自定义,因为目标PrepareForRun是Visual Studio中常见MSBuild目标的一部分。

在某些情况下,您需要复制没有作为引用的程序集,如果是这种情况,请参见:


如果上述情况并非如此,请检查所有要复制的引用是否具有属性Copy Local:True。

很抱歉,我不明白。你的意思是我应该在我的项目中引用第三方程序集的引用吗?我知道这会起作用,但你最终会得到一个项目,它引用了太多的程序集,这会变得很混乱。@Tersius:假设你将引用给驻留在你的s/m中的第三方dll,然后你将整个文件复制到另一个s/m中,它将如何引用你的s/m中的第三方dll。这就是为什么我要告诉你复制dll到你的bin文件夹,并添加对它的引用