如何将Visual Studio中的所有源代码导出到文本文件中?

问题描述 投票:0回答:5

我有一个相对较大的 Visual Studio 解决方案。

我需要将所有源代码导出到一个文本文件中。我还想在某处包含文件名。我该怎么做?

例如,如果我有一个类型

namespace MyProject.Core
{
    /// <summary>
    ///   Enumerates possible record status
    /// </summary>
    public enum RecordType
    {
        NonWearTime = 0,
        WearTime = 1,
        NotClassified = 2
    }
}

我希望它转到

output.txt
文件(或任何其他文本格式)并像这样显示

//***********************************
//Filename: RecordType.cs
//***********************************
namespace MyProject.Core
{
    /// <summary>
    ///   Enumerates possible record status
    /// </summary>
    public enum RecordType
    {
        NonWearTime = 0,
        WearTime = 1,
        NotClassified = 2
    }
}

所有其他类型应仅附加到文件末尾。我尝试了Resharper,但它的头文件选项只能包含静态文本(我尝试过

Filename: $FILENAME$
)并且模板选项仅适用于新创建的类。

各位,这是一个研究项目,我必须提供源代码和论文。

c# visual-studio-2010 export resharper
5个回答
8
投票

这应该可以解决问题

string rootPath = @"path you your root folder";
var header = "***********************************" + Environment.NewLine;

var files = Directory.GetFiles(rootPath, "*.cs", SearchOption.AllDirectories);

var result = files.Select(path => new { Name = Path.GetFileName(path), Contents = File.ReadAllText(path)})
                  .Select(info =>   
                      header
                    + "Filename: " + info.Name + Environment.NewLine
                    + header
                    + info.Contents);


var singleStr = string.Join(Environment.NewLine, result);
Console.WriteLine ( singleStr );
File.WriteAllText(@"C:\output.txt", singleStr, Encoding.UTF8);

备注:如果您遇到性能或内存效率低下的问题,请尝试使用

StringBuilder
代替,并将其开始时的容量设置为所有文件内容的总和。这将消除在最后一个
Select
方法中创建的大量冗余字符串。


2
投票

我会选择自制的解决方案。

这可以帮助您将每个文件的内容放入字符串中。

using System.IO;
...
foreach (string file in Directory.EnumerateFiles(folderPath, "*.cs"))
{
    string contents = File.ReadAllText(file);
}

您有文件名,因此可以将其附加在开头。

您仍然需要做的就是解析所有目录。

   public void DirSearch(string root)
   {

           foreach (string file in Directory.EnumerateFiles(root, "*.cs"))
           {
                    string contents = File.ReadAllText(file);
                    // Write to your outputfile once you've happened what you want in your header.
           }

           foreach (string d in Directory.GetDirectories(root))
           {
               DirSearch(d);
           }
   }

2
投票

作为一种无代码解决方案,如何尝试使用 windows 命令行 将所有文件合并为一个。

例如复制 /b *.cs newfile.txt

https://superuser.com/questions/111825/any-command-line-or-batch-cmd-to-concatenate-multiple-files

诚然,它又快又脏,但通过一些裁剪,它可能会产生你所需要的东西


1
投票

我会编写一个简单的控制台应用程序来做到这一点。它将搜索所有带有 *.cs 扩展名的文件,进行必要的修改,然后将文件保存到所需位置。您可以使用

Directory.EnumerateDirectories()
迭代遍历目录。


0
投票

首先进入Powershell,然后进入你的项目目录并运行命令

Get-ChildItem -Recurse -Path .\src -包括 *.js、*.tsx、*.jsx | ForEach-对象 { $relativePath = $.FullName.Replace((Get-Location).Path + "","") # 获取相对路径 添加内容 temp_source_code.txt "

n
n--- $relativePath ---`n" 获取内容 $.FullName |添加内容 temp_source_code.txt }

您可以在这里写下您的文件类型进行排序 -> 包括 *.js、*.tsx、*.jsx

© www.soinside.com 2019 - 2024. All rights reserved.