1

好的,这是我的问题,我有 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 ,我看不到解决它的方法。感谢您未来的帮助。

4

1 回答 1

3

首先,为了澄清从您的标题中推断出的可能混淆,自动导入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一个文件夹,以便所有项目自动导入它,或者您可以Directory.Build.props通过将Import元素添加到您的.csproj

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

您可以阅读有关文档的更多Directory.Build.props详细信息

于 2019-10-15T20:26:22.403 回答