VS 2017 通过文件路径引用本地项目(如在 VS 2015 中使用 global.json)

Posted

技术标签:

【中文标题】VS 2017 通过文件路径引用本地项目(如在 VS 2015 中使用 global.json)【英文标题】:VS 2017 reference local projects by filepath (like using global.json in VS 2015) 【发布时间】:2017-08-01 01:43:35 【问题描述】:

在 VS 2015 中,我们曾经能够像这样在 global.json 中指定本地路径:


    “projects”: [ “src”, “test”, “C:\\path\\to\\other\\projects” ]

然后它将该路径中的所有项目添加到当前解决方案中,使我们能够轻松地从现有项目中引用它们。

现在 VS 2017 已将其模型更改为使用 csproj,并在此过程中摆脱了 project.json 和 global.json,有人知道这样做的方法吗?

我得到的最好的结果是手动将其他项目一个一个地包含到解决方案中。然后,在所有需要引用它的现有项目中,我将不得不编辑他们的 csproj 以包含它们。与之前简单地在一个位置包含文件路径的方式相比,这确实很麻烦。

感谢您对此的任何帮助。

【问题讨论】:

.net core (csproj) global.json 'projects' equivalent的可能重复 【参考方案1】:

好的,伙计们,现在是 5 月,我们仍然没有来自 Microsoft 的官方解决方案。我使用 Powershell 和新的 .NET core CLI 得到了一些工作。 dotnet.exe 中已经内置了用于从项目中添加/删除解决方案的命令,所以这就是我想出的。

Includes.json


    "Includes": [
        "C:\\projects\\SomeProjectA\\src",
        "C:\\git\\SomeProjectB\\src"
    ]

Add-Includes.ps1

echo "Beginning import of projects in Includes.json"

$JsonIncludes = (Get-Content -Raw -Path "Includes.json") | ConvertFrom-Json

$IncludePaths = $JsonIncludes.Includes;
foreach ($IncludePath in $IncludePaths) 

    $ProjectFiles = Get-ChildItem ($IncludePath + "\*") `
                    -Include *.csproj `
                    -Recurse `
                    | % $_.FullName 

    foreach ($ProjectFile in $ProjectFiles) 
        dotnet sln add $ProjectFile
    

Remove-Includes.ps1

echo "Beginning removal of projects in Includes.json"

$JsonIncludes = (Get-Content -Raw -Path "Includes.json") | ConvertFrom-Json

$IncludePaths = $JsonIncludes.Includes;
foreach ($IncludePath in $IncludePaths) 

    $ProjectFiles = Get-ChildItem ($IncludePath + "\*") `
                    -Include *.csproj `
                    -Recurse `
                    | % $_.FullName 

    foreach ($ProjectFile in $ProjectFiles) 
        dotnet sln remove $ProjectFile
    

与使用旧的 Global.json 文件相比,这是几个额外的步骤,但它可以满足我们的需要。为方便起见,请添加一个解决方案文件夹并包含 Includes.json,以便您可以在 Visual Studio 中轻松修改它。

一些注意事项:

添加/删除脚本几乎完全相同,唯一的区别是 dotnet sln 添加/删除命令。这可能可以清理成一个交互式脚本。 您还可以进行更改,这样您就无需使用单独的添加/删除脚本,而只需阅读 Includes.json 并通过解析 .sln 文件将其与解决方案中的当前项目进行比较。

只是思考的食物。如果你想克隆/下载,这里是 repo:https://github.com/rushfive/VS2017-Includes

【讨论】:

您的回购链接已损坏

以上是关于VS 2017 通过文件路径引用本地项目(如在 VS 2015 中使用 global.json)的主要内容,如果未能解决你的问题,请参考以下文章

请教C#/.net高手,用VS结合源码管理团队协作开发,如何处理引用的dll在不同机器路径不一样的问题?

vs2010 C# 添加 DLL引用

WebAPI 怎样获取相对路径 获取本地路径

如何为本地主机测试运行设置虚拟目录?

VS NuGet加载本地程序包

在 VS Code 中设置本地项目的 Python 路径而不使用 settings.json 文件