使用.NET(C#)时,Debug / Release输出的单独或相同文件夹?

时间:2012-01-24 19:57:08

标签: .net visual-studio build

用于为Debug / Release 定义目标输出文件夹的最佳实践是什么:对于Debug /具有单独的文件夹是否更好?发布或者我应该使用相同的文件夹(使用.NET / C#时)?

我有两个独立的解决方案,因此一个解决方案的项目不能通过项目引用另一个解决方案的项目。因此,您不得不直接添加对程序集文件的引用。 这导致另一个问题:如果通过文件添加对另一个程序集的引用,则只能添加一个而不是一个用于调试和一个前发布(就像在C ++中可以使用库一样)。另一个问题是我必须添加一个引用,例如,bin / Release /MyOtherProject/MyAssembly.dll。我认为这很令人困惑,特别是在构建Debug并引用Release时。 =>可能会发生构建错误和版本冲突。

是否有长期在大型项目和环境中构建相同目标文件夹的经验?

这是一个与Stack Overflow问题相关的更精确的问题 Should we still make a difference between the release and debug output folders?

3 个答案:

答案 0 :(得分:5)

我们一直在.NET应用程序中使用相同的目录进行调试和发布,并且从未出现过问题。

此方法使大量任务变得更加容易,例如构建安装,将自定义DLL文件复制到构建后的目录,以及在输出目录中对文件进行版本控制,例如开发人员正确运行应用程序所必需的许可证文件。

答案 1 :(得分:4)

如果它们是两个不同的解决方案,我没有看到你想要引用Debug输出的充分理由。实际上,我认为你根本不应该引用其他项目目录中的输出。如果将代码移动到另一台机器并且您没有完全复制项目结构,则可能会破坏您的引用。

我认为最好的做法是

1)在Project / Solution A中有一个Lib目录,您可以手动复制Project / Solution B的输出。如果您不经常对Project B进行更改,请执行此操作。

2)将两个项目放在同一个解决方案中,然后添加对项目的引用。请记住,您可以在多个解决方案中拥有一个项目。如果您同时开发这两个项目,请执行此操作。

答案 2 :(得分:4)

如果您有两个相关的项目,您对它们处于相同的目标类型和配置(这意味着它不是您刚刚使用的某些第三方软件包)足够关心 - 您最好将它们放在同一个解决方案中。

如果由于某种原因无法,则会有另一种(有点难看的)解决方案。

您可以根据目标编辑.csproj和“动态”引用程序集。在.csproj文件中,引用位于名为“ItemGroup”的XML元素中。在每个项目组中,您有许多“引用”元素,并且程序集的路径位于“提示”元素中。您可以在提示中放入$(Configuration)变量。例如:

<ItemGroup>
    <Reference Include="your assembly">
      <HintPath>..\..\$(Configuration)\blabla.dll</HintPath>
    </Reference>
</ItemGroup>

这样,目录名称将包含您的配置名称(它们应该匹配 - 这意味着如果您更改名称,则会破坏内容)。

另一种选择是定义三个完全不同的项目组并使用“条件”属性:

  1. 没有用于引用System,System.xml等条件的项目组
  2. 具有属性Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "的项目组,其中将包含将在调试配置中使用的引用。
  3. 发布配置的属性为" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "的项目组。
  4. 在每个项目组中,您将以正确的配置引用程序集。

    它有点难看,因为.csproj有时会自动修改,你可以很容易地忘记并弄乱它。但无论如何,它会起作用。