如何在一个文件夹中构建所有项目?

问题描述 投票:0回答:5

有没有办法将解决方案构建到单个文件夹中?我在此解决方案中有几个项目,每个项目都访问应位于当前目录中的配置文件。我只是将每个项目的构建文件移到一个文件中,它仍然可以工作,但是,它看起来非常无组织和混乱。我只是想知道还有其他方法可以做到这一点。

c# solution
5个回答
14
投票

您可以在解决方案中每个项目的设置中设置输出目录(如果我们是关于 Visual Studio)。菜单:项目 -> 属性 -> 构建 -> 输出路径。例如,我使用

..\Build\
将项目构建到解决方案根目录的 Build 目录中。


10
投票

这篇 MSDN 文章解释了如何以一种简洁的方式做到这一点: https://blogs.msdn.microsoft.com/kirillosenkov/2015/04/04/using-a-common-intermediate-and-output-directory-for-your-solution/

它允许您仅指定这些目录一次,并在多个项目中使用这些设置。

步骤:

  1. 在解决方案中创建单个

    common.props
    文件,该文件将指定项目的输出和中间路径并将其覆盖到公共目录(如
    Solution/bin
    )。 这是我在文章中找到链接的示例
    *.props
    文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
            <Configuration Condition="$(Configuration) == ''">Debug</Configuration>
            <OutputPath>$(SolutionDir)\bin\$(Configuration)\</OutputPath>
            <OutDir>$(OutputPath)</OutDir>
            <OutDir>$(OutputPath)</OutDir>
            <IntermediateOutputPath>
                $(SolutionDir)\obj\$(Configuration)\$(MSBuildProjectName)\
            </IntermediateOutputPath>
            <UseCommonOutputDirectory>False</UseCommonOutputDirectory>
            <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
        </PropertyGroup>
    </Project>
    
  2. 通过添加此行(实际路径可能有所不同),将此文件包含到要为其设置公共输出目录的每个

    *.csproj
    中:
    <Import Project="..\Common.props" />

更新:现在您可以将

common.props
的内容放入
Directory.Build.props
文件中,该文件将由目录树中的所有项目自动导入。 文档:https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-by-directory?view=vs-2022&source=recommendations#directorybuildprops-and-directorybuildtargets


7
投票

您可以更改项目的“输出路径”,默认为给定项目的 bin 目录。

右键单击每个项目,从上下文菜单中选择

Properties
,然后选择
Build
选项卡。 在
Output
部分的底部更改
Output path:
。为每个项目设置相同的路径。

我同意你问题下的评论,你不应该改变它。相反,您可以创建构建后操作(PS 脚本),将项目 bin 目录中的所有文件复制到您指定的目录中。

更新:

将此脚本设置为构建后命令(项目属性->构建事件选项卡->构建后事件命令行):

xcopy "$(TargetDir)*" "$(SolutionDir)Build"  /s /i /Y


1
投票

对于每个项目:

  1. 进入项目属性,在“构建”选项卡中。
  2. 选择“所有配置”、“所有平台”,以防万一。
  3. 在输出文件夹中写入“.. in\”(或所有这些文件统一的任何路径 - 不在当前项目目录中)。或者,要将 DLL 组织到子文件夹中,您可以在输出路径中写入“.. in\Sub-project-directory”。然后,您应该为 EXE 项目添加一个 App.config 文件,并探测所有 DLL,以便可以在运行时找到并加载它们。

0
投票

请注意,如果我们正在讨论将多个可执行文件构建到同一输出目录中,您还可以将它们添加为主(启动)项目的项目引用。每次构建时它们都会自动复制到主项目输出目录。

(注意:这适用于 VS 2017 或 VS 2019 中的 .NET Core 项目。我不确定它是否适用于 .NET Framework 项目)

© www.soinside.com 2019 - 2024. All rights reserved.