【问题标题】:Is there a correct way to reference a sqlproj project from a csproj project using Directory.Build.Props?是否有使用 Directory.Build.Props 从 csproj 项目中引用 sqlproj 项目的正确方法?
【发布时间】:2020-03-30 06:11:58
【问题描述】:

我正在实施一个新的解决方案,它依赖于许多“仅内容”NuGet 包。其中包括一些我需要参考的程序集和 dacpacs。

我的意图是创建一个 SDK 样式的 csproj,它使用 PackageReference 元素引用所有包。然后我计划使用 Directory.Build.Props 为我的解决方案中的所有其他项目提供对该项目的引用,以便首先构建它(并且我的所有依赖项都将在构建开始时可用)。

这行得通,但是在我添加 sqlproj 来使用 dacpacs 时,我开始遇到麻烦(我已经在我的解决方案中添加了一些 SDK 样式的 csproj 文件,这些文件都按我的预期工作)。

当让 sqlproj 文件引用 SDK 样式的 csproj 文件时,我发现 Visual Studio 会在启动时挂起(一个已知的错误记录在 here)。

然后我尝试用传统的 csproj 文件替换这个项目。下面我有来自我的 Directory.Build.Props 的 sn-ps,我试图自动创建从我的 csproj 和 sqproj 到我负责恢复 NuGet 包的项目的引用。

由于 NuGet.Restore 项目(现在是传统的 csproj 获得循环引用,因为它似乎不符合条件),因此以下操作失败:-

  <ItemGroup Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
    <ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
  </ItemGroup>

以下解决了循环引用,但 sqlproj 无法在 Visual Studio 中加载,并出现错误“无法修改源自导入文件的评估对象”:-

  <Choose>
    <When Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' ">
      <ItemGroup>
        <ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
      </ItemGroup>
    </When>
  </Choose>

有没有其他方法可以通过弯曲 Directory.Build.props 使从 sqlproj 到 csproj(传统或 SDK 样式)的引用与 MSBuild Visual Studio一起使用?

据我所知,确保 MSBuild 将首先运行我的恢复项目的唯一方法是让其他所有项目都引用它。

我正在接近唯一可行的选择是拥有一个单独的预构建脚本,必须手动运行该脚本以在运行我们的解决方案构建之前检索 NuGet 包(我一直希望避免这种情况)。

【问题讨论】:

    标签: .net visual-studio msbuild nuget csproj


    【解决方案1】:

    我有一个解决方法/解决方案,将我的恢复项目保留为传统的 csproj。我已经修改了条件,因此它排除了 sqlproj 项目,然后将对我的 NuGet 还原的引用手动添加到每个 sqlproj 文件中:-

     <Choose>
        <When Condition=" '$(MSBuildProjectName)'!='NuGet.Restore' AND '$(MSBuildProjectExtension)'!='.sqlproj' ">
          <ItemGroup>
            <ProjectReference Include="$(MSBuildThisFileDirectory)NuGet.Restore.csproj" />
          </ItemGroup>
        </When>
      </Choose>
    

    (这可能并不适合所有人,但由于我们不希望将来添加任何更多的 sqlproj 项目,因此希望不会给我们带来任何维护上的麻烦!)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2023-03-31
      • 2010-11-03
      相关资源
      最近更新 更多