.net 核心 (csproj) global.json 'projects' 等效

.net core (csproj) global.json 'projects' equivalent

使用 .net 核心 (project.json) 我曾经通过将源代码的路径添加到 global.json 中的 projects 字段来在 nuget 包和源代码之间切换。在我这样做之后,它将添加它可以在该路径中找到的所有项目,这些项目可以替换我引用的 nuget 包。

我经常使用此功能,因为我有自己使用的 nuget 包,但我想在发布之前测试其他项目中的更改。但是一旦我切换到 Sdk 1.0.0/VS 2017/csproj .net 核心,该功能似乎就消失了。

替代方法是手动添加每个项目,手动切换引用(因为它们被分解为项目、nuget 和 sdk 引用),然后再切换回来。

任何想法或建议都会很棒。

更新: 听起来 csproj 中没有等效项(正如预期的那样),但目前有 msbuild 解决方法(从最初的 VS 2017/.NET Core SDK 1.0.0 版本开始)

是的,我也已经习惯了这个功能并围绕它构建了我的工作流程。我仍在寻找解决方案,但我目前正在研究在 csproj 文件中使用条件逻辑的想法。由于现在是 msbuild,您可以这样做:

    <Choose>
    <When Condition="Exists('..\..\..\MyProject')">
        <ItemGroup>
            <ProjectReference Include="..\..\..\MyProject\src\MyProject\MyProject.csproj" />
        </ItemGroup>
    </When>
    <Otherwise>
        <ItemGroup>
            <PackageReference Include="MyProject" Version="1.0.0" />
        </ItemGroup>
    </Otherwise>
</Choose>

这用一个条件替换了对包的硬引用,如果它可以找到源代码(在本例中是目录)则使用项目引用,如果找不到则使用包引用。

因此默认情况下您将引用该包,但如果您想调试您的项目之一,您可以在条件检查的位置检出它,并将该项目添加到您的解决方案中。

这样您只需要在您想要包含源代码时更改您的解决方案文件(通过添加项目),而不是重新连接所有项目引用。

对于其他有兴趣尝试用 Global.json 进行模拟的人,我现在使用几个 powershell 脚本和一个模仿它的自定义 json 文件解决了这个问题。在这里查看我的答案: