【问题标题】:Minify C3 code in Visual Studio 2017在 Visual Studio 2017 中缩小 C3 代码
【发布时间】:2018-10-19 04:08:34
【问题描述】:

我想在 Visual Studio 2017 中缩小 C# 代码(文件)。是否有任何扩展或其他方法可以做到这一点。我已经搜索过了,没有找到任何有用的东西。我知道有一些方法可以缩小 js、CSS 或 HTML 文件,但我需要 C# 的缩小器(如果存在)

【问题讨论】:

  • 除了这只是要求一个工具,为什么有人需要这个? C# 代码将被编译,缩小只会使其难以维护...... ????
  • 谢谢,@Smartis。除了编译,我需要重写局部变量并简化它们。因为编译代码,会完全改变它,它帮不了我,它有它自己的用法。
  • @Smartis 的一种用法是在应用程序/游戏中托管 c# 脚本,然后动态编译它们。我知道的一个例子是 Keen Software 的游戏“Space Engineers”。它们允许您使用 C# 编写“游戏脚本”,但您受到固定字符数的限制 - 这是因为多人游戏需要通过网络将任何脚本传输给其他玩家,因此,保持数据大小减小是一个好主意......所以缩小你的 C# 脚本意味着更多的实际代码用于相同数量的使用字符,或者相同代码的更少网络流量:)

标签: c# minify bundling-and-minification


【解决方案1】:

您可以编写一个继承自基类 CSharpSyntaxRewriter 的类,并使用它来根据您希望缩小代码的方式来缩小代码。

首先要删除所有语法琐事,这可以通过CSharpSyntaxRewriter 基类的以下实现轻松实现:

public class TriviaRemover : CSharpSyntaxRewriter
{
    public override SyntaxNode Visit(SyntaxNode node) => base.Visit(node).WithoutTrivia();

    public override SyntaxTrivia VisitTrivia(SyntaxTrivia trivia) => default;
}

要实际使用它,可以使用类似以下示例的方法:

var tree = CSharpSyntaxTree.ParseText(@"
  public class Foo
  {
      //Here some trivia to be removed
      public string bar = ""bar"";
  }");
var Mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create("MyCompilation",
    syntaxTrees: new[] { tree }, references: new[] { Mscorlib });
var model = compilation.GetSemanticModel(tree);
var root = model.SyntaxTree.GetRoot();

var tr = new TriviaRemover();
var newRoot = tr.Visit(root);

Console.WriteLine(newRoot.GetText());
Console.ReadLine();

在此处查看另一个示例(上述示例代码的来源): https://johnkoerner.com/csharp/using-a-csharp-syntax-rewriter/

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2017-11-19
    • 2018-07-03
    相关资源
    最近更新 更多