将所有输出dll放在Visual Studio的公共目录中

时间:2010-07-21 08:25:28

标签: visual-studio-2010 msbuild projects-and-solutions output-directory

我有几个不同的解决方案,其中一些项目可能依赖于其他解决方案中项目的输出。为了解决这个问题,我一直在将每个项目中的/ bin /文件夹中的dll文件复制到构建后的共享库位置,然后从那里复制/引用它们到依赖项目。

但是,随着库解决方案变得越来越大,这往往变得无法维护。我花了太多时间在Windows资源管理器中遍历解决方案目录,寻找/ bin /文件夹,并试图找出每个我需要的dll文件中的哪一个或哪些文件。

有没有办法让Visual Studio提示我希望解决方案中的所有项目具有相同的输出目录?例如,直接位于解决方案文件夹下的/ bin /文件夹,其中所有项目都会输出它们。

如果可能的话,我希望在没有复制文件的硬编码后构建事件的情况下实现这一点,因为如果项目输出更改文件名或添加其他文件,则会失败。我想更改实际输出目录的位置 - $(OutDir)的位置,如果你愿意的话。

2 个答案:

答案 0 :(得分:7)

我知道你说你不想使用后期制作活动,但你的理由是为什么不引起我的兴趣。听起来你可能很难在post build事件中编写.dll的名称。这很容易避免。

xcopy "$(TargetDir)*" "c:\common\" /Y

*只会导致bin / Debug /文件夹中的所有被复制到您的公共文件夹中。你也可以根据需要复制dll。或者,如果使用$(TargetPath),则只复制项目结果的1 dll,而不复制任何其他相关的依赖项。

<强>更新

我们这样做的方法是将每个项目的整个bin文件夹复制到 sub 文件夹中。假设您有2个项目WebUtilHtmlParser,其中WebUtil依赖于HtmlParser。对于这两个项目,请使用xcopy "$(TargetDir)*" "c:\common\$(ProjectName)" /Y。这将创建c:\ common \ WebUtil \和c:\ common \ HtmlParser。在WebUtil中,添加对c:\ common \ HtmlParser \ HtmlParser.dll的引用。现在将在c:\ common。

中有2个HtmlParser.dll副本

c:\ common \ HtmlParser \ HtmlParser.dll //最新版本。 c:\ common \ WebUtil \ HtmlParser //构建WebUtil时最新构建的

这有各种优点。如果您更改HtmlParser的API,WebUtil将继续工作,因为它将使用较旧的HtmlParser.dll,直到您尝试重建WebUtil(此时您将因为更改的API而出现构建错误)。

现在,如果第三个项目涉及依赖于WebUtil的混合,并且您正在使用在HtmlParser中公开类的WebUtil的某些部分,那么您将需要添加对两者的引用来自新项目的项目。添加对HtmlParser.dll的引用时,请使用c:\​​ common \ WebUtil中的引用。这样做是因为您只是将其作为WebUtil的必要要求包含在内。现在,您将始终拥有与您当前版本的WebUtil.dll相匹配的HtmlParser.dll版本。

我希望这是有道理的。管理它绝对是一件棘手的事情。等到你必须使用svn:externals = P

开始拉下所有依赖项

答案 1 :(得分:3)

您可以在每个项目属性中设置输出目录。

右键单击该项目,选择Properties

对于C#,它是Build属性页之一,位于OutputOutput directory下。

在VB.Net项目中,它位于Compile标签上,位于顶部的文本框中。