从CSProj列表生成解决方案文件

14

我有很多项目,但没有一个包含所有内容的主解决方案。我想要这样一个解决方案是为了重构。

因此,我想知道是否有自动构建解决方案文件的方法。手动添加所有项目是不可行的。


需要记住的一件事是,你的某些项目可能会引用编译后的dll而不是创建这些dll的项目。在这种情况下,VisualStudio内置的重构将无法跨越这个边界。因此,如果实用方法签名被更改,则引用实用dll而不是项目的应用程序不会自动更改以匹配。 - Pedro
8个回答

18
在2018年,您可以使用 dotnet sln 命令将项目添加到现有解决方案中,使用 dotnet new sln 来创建一个新的解决方案。
要将当前文件夹中的所有项目添加到解决方案中,请在 PowerShell 中使用这些命令。
dotnet new sln
Get-ChildItem -Recurse *.csproj | ForEach { dotnet sln add $_.FullName }

8

你能提供那个代码吗?这样其他人就可以扩展它(例如:如果他们有vbproj文件或其他什么东西)。 - Alexander Bird
3
源代码可在BitBucket上获取: https://bitbucket.org/object/solutionmaker/ - Vagif Abilov
这些链接现在已经失效了。 - David Airapetyan

2
你可以尝试这个(下面的代码来自所有网站中的此网站...)。
但是,如果它不起作用并且调试需要太多时间,我建议您痛苦地手动添加它们一次。只需放些好音乐,然后开始吧... :)
@oefe 我认为VS.NET不允许你将项目拖放到解决方案中,我曾经尝试过。
Imports EnvDTE
Imports EnvDTE80
-----------------------------------------------------------------------------------
    Private Shared Sub DoStuff()

        Dim filePath As String = "c:\temp"

        Dim fileName As String = "bld_TestApp.sln"

        Dim fullName As String = Path.Combine(filePath, fileName)

        Dim objType As Type

        Dim objDTE As EnvDTE.DTE

        objType = Type.GetTypeFromProgID("VisualStudio.DTE.8.0")

        objDTE = DirectCast(System.Activator.CreateInstance(objType), EnvDTE.DTE)

        Console.WriteLine(objDTE.Name + ":" + objDTE.Version)


        objDTE.Solution.Create(filePath, fileName)

        objDTE.Solution.AddFromFile("C:\Common.vbproj")

        objDTE.Solution.SaveAs(fullName)


    End Sub

2
Vagif Abilov编写了一个非常棒的实用程序,可以从项目文件生成解决方案文件。如果你正在为那些不“相信”解决方案文件的人工作,这将是令人惊叹的。唉。

GenerateSolutionFile.exe

用法:GenerateSolutionFile /p /s [/i includeFilter] [/e excludeFilter]

该博客已被删除,其中包含有代码的zip文件: https://web.archive.org/web/20090810131702/http://bloggingabout.net/blogs/vagif/archive/2009/08/04/utility-to-generate-visual-studio-solution-file-for-a-group-of-projects.aspx

看起来作者在这里上传了该工具的msi版本: https://marketplace.visualstudio.com/items?itemName=VagifAbilov.SolutionMaker

据我所知,Microsoft slngen可能是更好的解决方案,因为它是MIT许可的源代码,并且是一个活跃的项目。 https://github.com/microsoft/slngen


该链接已失效。 - David Airapetyan

1

-2

我已经使用文本操作编程方式创建了.vcproj文件的解决方案文件(但cs/vb同样适用)。如果您在记事本或其他编辑器中打开解决方案文件,那么弄清楚如何做并不是很难。

不幸的是,由于代码是专有的,我无法提供它。


-3
创建一个空解决方案,然后一次性将所有项目拖放到其中?

原始问题陈述了手动添加它们是不可行的。 - Pedro

-3

看看nAnt,它是Ant的.NET端口。它具有执行此类操作或在没有此类操作的情况下构建的能力。


这很有趣:我提供了最佳解决方案,但我却被投票踩得最多,而且没有一个评论来解释任何人在想什么。与此同时,最糟糕的解决方案(涉及某些奇怪的自定义代码)得到了赞同。 - Rob Williams
我猜测一下,如果您提供确切的NAnt任务来合并所有项目,那么您的答案将更有帮助。 - Pedro
据我了解,nAnt可以替代解决方案文件,但我不知道它如何创建解决方案文件--实际上,我很喜欢这个功能,但可能并不适合每个人的需求。 - Alexander Bird

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