VS 2017 通过文件路径引用本地项目(如在 VS 2015 中使用 global.json)
VS 2017 reference local projects by filepath (like using global.json in VS 2015)
在 VS 2015 中,我们曾经能够像这样在 global.json 中指定本地路径:
{
“projects”: [ “src”, “test”, “C:\path\to\other\projects” ]
}
然后它会将该路径中的所有项目添加到当前解决方案,使我们能够轻松地从现有项目中引用它们。
现在 VS 2017 已将其模型更改为使用 csproj,并在此过程中摆脱了 project.json 和 global.json,有人知道解决这个问题的方法吗?
我得到的最好结果是手动将其他项目一个接一个地包含到解决方案中。然后,在所有需要引用它的现有项目中,我将不得不编辑它们的 csproj 以包含它们。与以前简单地在一个位置包含文件路径的方式相比,这确实很麻烦。
感谢您对此的任何帮助。
好的伙计们,现在是五月了,我们仍然没有来自 Microsoft 的官方解决方案。我使用 Powershell 和新的 .NET 核心 CLI 进行了一些工作。 dotnet.exe 到 add/remove 个项目的解决方案中已经内置了命令,所以这就是我想出的。
Includes.json
{
"Includes": [
"C:\projects\SomeProjectA\src",
"C:\git\SomeProjectB\src"
]
}
添加-包含。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
}
}
删除-包含。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.
中轻松修改它
一些注意事项:
- Add/Remove脚本几乎完全一样,唯一的区别是dotnet sln add/remove命令。这可能会被清理成一个交互式脚本。
- 您也可以更改一些东西,这样您就可以不用单独的 add/remove 脚本,只需阅读 Includes.json 并通过解析 .sln 文件将其与解决方案中当前的项目进行比较.
深思。如果你想 clone/download,这里是回购协议:https://github.com/rushfive/VS2017-Includes
在 VS 2015 中,我们曾经能够像这样在 global.json 中指定本地路径:
{
“projects”: [ “src”, “test”, “C:\path\to\other\projects” ]
}
然后它会将该路径中的所有项目添加到当前解决方案,使我们能够轻松地从现有项目中引用它们。
现在 VS 2017 已将其模型更改为使用 csproj,并在此过程中摆脱了 project.json 和 global.json,有人知道解决这个问题的方法吗?
我得到的最好结果是手动将其他项目一个接一个地包含到解决方案中。然后,在所有需要引用它的现有项目中,我将不得不编辑它们的 csproj 以包含它们。与以前简单地在一个位置包含文件路径的方式相比,这确实很麻烦。
感谢您对此的任何帮助。
好的伙计们,现在是五月了,我们仍然没有来自 Microsoft 的官方解决方案。我使用 Powershell 和新的 .NET 核心 CLI 进行了一些工作。 dotnet.exe 到 add/remove 个项目的解决方案中已经内置了命令,所以这就是我想出的。
Includes.json
{
"Includes": [
"C:\projects\SomeProjectA\src",
"C:\git\SomeProjectB\src"
]
}
添加-包含。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
}
}
删除-包含。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.
中轻松修改它一些注意事项:
- Add/Remove脚本几乎完全一样,唯一的区别是dotnet sln add/remove命令。这可能会被清理成一个交互式脚本。
- 您也可以更改一些东西,这样您就可以不用单独的 add/remove 脚本,只需阅读 Includes.json 并通过解析 .sln 文件将其与解决方案中当前的项目进行比较.
深思。如果你想 clone/download,这里是回购协议:https://github.com/rushfive/VS2017-Includes