【问题标题】:VS2017 Directory.Build.props doesn't load for whole solutionVS2017 Directory.Build.props 不加载整个解决方案
【发布时间】:2020-02-12 09:12:32
【问题描述】:

好的,这是我的问题,我有 2 个库和 2 个项目,其中包含他们的 .csproj(1 个用于开发,1 个用于客户端交付)。

当我们用于开发目的(内部 -> 公共)时,我需要一个定义的常量来设置我的大部分课程可访问。 我在我的开发项目目录中使用了一个 Directory.Build.props,它定义了一个变量,如果这个变量存在,我的 Libraries .csproj 定义一个常量。

<PropertyGroup Condition ="$(ActiveIHMMode)=='true'">
    <DefineConstants>$(DefineConstants);DEV_IHM_MODE</DefineConstants>
</PropertyGroup>

我可以看到我的开发项目一切正常,但它不适用于我的库(他们看不到我的 .props 变量)

我认为有一个简单的原因,这是因为依赖项编译顺序。 我的目录层次结构如下:

LibA
LibB
ProjectDelivery
ProjectDev

我的 LibA 是先编译的,没有找到任何 Directory.Build.props,因为我的文件在我的 ProjectDev 目录中,但是我的 ProjectDev 作为最后一个要编译的元素找到了它,但是对于我的 Lib 来说已经太晚了。

第一次使用 .props,我找不到解决方法。感谢您未来的帮助。

【问题讨论】:

    标签: c# visual-studio-2017 constants vsprops


    【解决方案1】:

    首先,为了澄清从您的标题中推断出的可能混淆,自动导入 Directory.Build.props 不是 Visual Studio 2017 功能,而是 MSBuild 15 功能(包含在 VS2019 中)。

    我的吹毛求疵,让我们来点技术吧:

    问题不在于您的构建顺序。 Directory.Build.props 仅在您的 ProjectDev 项目中出现的原因是,MSBuild.csproj 的目录中查找名为 Directory.Build.props 的文件并在找到时将其导入。如果未找到,则在父目录中搜索该文件。它会一直在父目录中寻找Directory.Build.props,直到它到达根目录,或者它实际上找到了那个文件然后停止,所以它只会自动导入找到的第一个Directory.Build.props

    如上所述,您的项目结构如下所示:

    /LibA/
    /LibA/LibA.csproj
    
    /LibB/
    /LibB/LibB.csproj
    
    /ProjectDelivery/
    /ProjectDelivery/ProjectDelivery.csproj
    
    /ProjectDev/
    /ProjectDev/ProjectDev.csproj
    /ProjectDev/Directory.Build.props
    

    只有ProjectDev 会自动导入Directory.Build.props;其他项目都没有Directory.Build.props 既不在其目录中,也不在其任何父目录中。

    要解决您的问题,您可以将Directory.Build.props 上移一个文件夹,以便您的所有项目自动导入它, 或者您可以通过将Import 元素添加到您的.csproj 来手动导入Directory.Build.props

    <Project>
      <Import Project="..\ProjectDev\Directory.Build.props" />
    </Project>
    

    您可以在documentation 中阅读有关Directory.Build.props 的更多详细信息。

    【讨论】:

      猜你喜欢
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2019-01-02
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多