Visual Studio安装项目Team Build输出与本地构建不同

时间:2012-02-20 02:24:51

标签: tfs msbuild tfsbuild

我有一个不断出错的Visual Studio 2010安装项目(.vdproj)。尽管我尝试将其排除或从项目文件中删除,但安装程序中包含依赖项。我可以使用Visual Studio从依赖项中排除程序集,然后构建项目,本地计算机上的输出将不包括排除的程序集。当我签入项目并使用TFS(2008)构建时,总是包含程序集。

有问题的程序集是我排除的数字之一,因为它们已作为项目输出包含在安装项目中。因此,安装程序最终可能会使用同一程序集的两个副本,如果它尝试将它们写入同一位置(GAC或 bin 文件夹),则安装将失败并显示文件使用错误。

通常我会发现,当我重新打开安装项目时, Exclude 标志已恢复为 false

这真的非常烦人并浪费了相当多的时间,因为现在我使用Orca来加载每个构建以尝试确保输出中不存在重复的程序集。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

Visual Studio安装项目基本上已被弃用,并且在很长时间内都没有看到重大工作。除了你所看到的问题,他们还有很多其他问题与Team Build结合使用。

请参阅:http://msdn.microsoft.com/en-us/library/ee721500.aspx

  

注意

     

Visual Studio的未来版本不包含Visual Studio Installer项目模板。为了保留Visual Studio Installer项目中现有的客户投资,Microsoft将继续支持Visual Studio 2010随产品生命周期策略一起提供的Visual Studio Installer项目。有关详细信息,请参阅扩展的Microsoft支持业务生命周期策略&开发产品。

查看Wix as a replacement for these projects

答案 1 :(得分:0)

我在msdn上找到了this page,其中 Exclude 标志被重置为 False 的解决办法:

  

重新打开解决方案时,会再次包含以前排除的文件

     

从安装项目中排除文件时,您可能会在关闭并重新打开解决方案后看到该文件再次包含在内。如果来自两个不同源位置的同一DLL文件有两个副本,则可能会发生这种情况。

     

要解决此错误,请更改其中一个文件的“复制本地”属性:

     

在Solution Explorer中,单击要删除的DLL引用。

     

在“视图”菜单上,单击“属性窗口”。

     

将Copy Local属性更改为False。

不幸的是,这个解决方案对我来说不起作用,因为安装项目是针对ASP.NET网站的,但是此处记录了Microsoft解决方案以供将来参考。

我想我已经确定了为什么存在依赖性。该网站引用了许多项目的项目成果。在预编译站点时,将构建引用的项目程序集并将其放入 bin 文件夹中。然后,安装项目将它们标识为依赖项,尽管安装项目已包含这些项目的项目输出。我在安装项目中使用项目输出的原因是因为TFS喜欢检查预编译的web文件夹中包含的dll,这是解决方案文件结构的一部分。这有时会导致生成的安装程序中出现旧的或不正确的dll版本。

我的解决方法是编辑TFSBuild.proj文件并添加一个任务以从预编译的 bin 目录中删除这些dll。然后,在构建安装程序时,它们不会被识别为依赖项。