2012-01-09 48 views
1

当您构建.Net项目时,输出将被复制到输出文件夹(例如:bin文件夹)中;不仅复制了项目源代码发布的二进制文件,还复制了标记为CopyLocal = True选项的所有依赖项(文件引用)。如何检索.Net项目的输出而不依赖关系

对于定制构建任务(即:在Team Build上编译时),我想知道如何从没有这些依赖关系的构建中发布二进制列表(我可能不会 - 也不想要 - 设置CopyLocal = False)。

我的问题是,我没有找到一个干净的方式来确定这个输出。我最接近的解决方案是在项目文件上循环,读取AssemblyName并检查是否有预见的pdb,xml,resx文件。但是,我仍然缺少资源文件(?)和其他输出,因为我不知道所有可能的项目。

所以我的问题是:你知道任何方法/技巧/算法来获得构建发布的二进制列表;即组件,卫星组件(子文件夹的+路径),pbd,xml(即:文档),但没有依赖关系?

+0

不需要回答这个问题是非常重要的。 – 2012-01-09 14:34:14

+0

将** CopyLocal **设置为false是解决方案。你明白没有本地目录中的依赖项,那么你的应用程序不可能正常运行? – 2012-01-09 19:47:01

+0

对不起,但我可能不会设置CopyLocal = False,否则我没有bin文件夹中的可用依赖项,也无法在Team Build上运行单元测试。这些不在GAC中,但在Drop文件夹中。另外,我最好不要修改源代码。我只管理生成服务器,不对源代码负责。如果没有其他干净的方法来确定确切的输出,我可以解析项目文件并更新CopyLocal,但我不知道是否有MSTest的选项(如MSBuild的“referencepath”选项)传递ot Drop文件夹到MSTest – 2012-01-10 07:52:12

回答

0

我有一个(也许是非常愚蠢的)想法..

在构建期间(在Team Build上)使用在“obj”文件夹中生成的FileListAbsolute.txt如何?它精确地包含了构建的输出(dll,resx,xml,...),没有依赖关系。我可以使用构建环境变量(路径等)轻松地检索它,并循环它以获取从“obj”文件夹放入“bin”文件夹的文件的名称。

0

您可以将它添加到您的所有装配的后生成事件:

copy "$(TargetDir)$(TargetName).???" "C:\TargetDir" 

您将获得在C程序集:\ TARGETDIR

+0

是的,但我会遗漏一些附属程序集(由resx发布) xml文档(如果这个是生成的)。 – 2012-01-10 11:56:20

+0

你的resx在dll里面,并且为你的xml文档你可以添加“复制”$(TargetDir)$(TargetName).dll.XML“”C:\ TargetDir“” – 2012-01-10 11:59:08

+0

不是所有的resx都在dll中!你忘了IMO卫星组件 – 2012-01-10 13:34:28