4

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

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

有没有办法给 Visual Studio 一个提示,我希望解决方案中的所有项目都具有相同的输出目录?例如,解决方案文件夹下的 /bin/ 文件夹,所有项目都将其输出放置在其中。

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

4

2 回答 2

7

我知道你说你不想使用后期构建事件,但是你为什么不让我感兴趣的原因。听起来您可能在构建后事件中对 .dll 的名称进行了硬编码。这很容易避免。

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

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

更新

我们这样做的方式是将每个项目的整个 bin 文件夹复制到一个文件夹中。假设您有 2 个项目,WebUtil并且HtmlParser,其中 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 将继续工作,因为在您尝试重新构建 WebUtil 之前,它将具有较旧的 HtmlParser.dll(此时您会因为更改的 API 而出现构建错误)。

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

我希望这是有道理的。管理这绝对是一件棘手的事情。等到你必须开始使用 svn:externals =P 拉下所有依赖项

于 2010-07-21T08:30:35.147 回答
3

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

右键单击项目,选择Properties

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

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

于 2010-07-21T08:30:07.307 回答