在Visual Studio 2017中引用其他解决方案中的项目

5
最近我开始尝试在Visual Studio 2015中使用xproj项目。在构建Web应用程序时,我有一个位于不同解决方案中的类库,可以使用global.json文件引用它。我喜欢这个功能,因为你可以一次性构建所有内容,而不是在Visual Studio实例之间切换。
现在我发现Microsoft正在放弃这些项目,并回到使用csproj的方式。我非常赞成遵循最佳实践,但我似乎无法弄清楚如何以与global.json相同的方式将外部项目引入解决方案。我还羞于承认我似乎想不到该如何搜索此内容。
在Visual Studio 2017中有没有新的推荐方法?

4
我可能在你的问题中漏掉了什么,但你可以在“解决方案资源管理器”中右键单击解决方案,然后选择“添加”->“现有项目”->并导航到要添加的项目。 - Rufus L
越想越觉得这可能是正确的实现方式。感觉与 global.json 文件设置的方式完全不同,但理论上与你提出的方案是完全相同的。@RufusL - Chris Lees
1
如果你的项目在解决方案之外,那么直接引用它可能是没有意义的。如果项目存在于解决方案之外,那很可能意味着它旨在被其他解决方案使用,对吧?因此,如果你最终需要更改该项目,可能会破坏其他解决方案,导致所有其他解决方案都需要更改。世界已经超越了直接这样引用。这就是为什么我们有 NuGet。从项目创建 NuGet 包并在自己的解决方案中引用它们。 - mason
@mason NuGet让事情变得更加复杂。我理解你的意思。不确定NuGet是否适合我们,因为这是一个仅由几个项目内部使用的类库。我们所做的任何更改都可以轻松地在可能受到影响的几个项目中进行修复。 - Chris Lees
根据我的类似经验,不使用NuGet会更加麻烦。你对NuGet有什么担忧? - mason
@mason,我真的很喜欢同时在两个解决方案中编写代码并进行一次构建的能力。如果采用NuGet方法,我需要两个Visual Studio实例对类库进行更改,编译后再更改应用程序并在那里编译。此外,在我们的Jenkins框中,关于NuGet包被缓存以某种方式发生了很多奇怪的事情,需要手动清除一些超级模糊的文件夹位置,然后才能使构建再次正常工作。 - Chris Lees
1个回答

1
我们可以使用dotnet命令行接口将现有项目添加到一个项目中。
C:\temp\Bar> dotnet add .\Bar.csproj reference ..\Foo\Foo.csproj

一个解决方案:
C:\temp\Bar> dotnet sln .\Bar.sln add ..\Foo\Foo.csproj

这样做是否可以使引用的项目文件像直接打开其解决方案一样显示在解决方案资源管理器中?我喜欢 global.json 文件的原因是我可以从一个 Visual Studio 实例中编辑两个项目中的所有文件,并一次性构建它们。 - Chris Lees
@ChrisLees 哦,你想将它添加到解决方案而不是项目中。 - Shaun Luttin
你知道dotnet sln add...是否支持链接到xproj文件吗?当我尝试时,它会崩溃并抛出一个异常,指控找不到某个sdk文件:Unhandled Exception: Microsoft.Build.Exceptions.InvalidProjectFileException: The imported project "C:\Program Files\dotnet\sdk\1.0.0\Microsoft\VisualStudio\v15.0\DotNet\Microsoft.DotNet.Props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. - Mark Olbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接