C#源文件合并

标签 c# .net code-generation thrift

我使用一种生成 c# 源代码的工具 (thrift),每种类型一个文件。我想将所有类型合并到一个可编译的源文件中。我说可编译是因为简单地连接每个文件的文本将产生一个不编译布局的文件,例如多个使用 block 。

是否有一个命令行工具可以执行此操作,或者我是否需要创建一个,如果有,我应该查看哪些库来执行此操作。

======= 编辑 ======

没有找到任何东西,也没有为 thrift 编译器源代码做出贡献,所以我敲了这个,它起到了作用:https://github.com/myles-mcdonnell/SourceMeld

现在我可以在 VS 中添加两个预构建步骤,一个用于 exe thrift 以生成源文件,两个用于合并到一个文件(包含在项目中的文件)并且我在开发时有一个无缝的构建过程。

最佳答案

如果您以巧妙的方式编写源文件,则可以连接它们。

看,这行不通:

using External.Name.Space;
namespace My.Name.Space
{
    ...
}

using External.Name.Space;
namespace My.Name.Space
{
    ...
}

但是这样做:

namespace My.Name.Space
{
    using External.Name.Space;

    ...
}

namespace My.Name.Space
{
    using External.Name.Space;

    ...
}

这两种表示法在功能上基本等同(有关详细信息,请参阅“Should Usings be inside or outside the namespace”)。

像 ReSharper 这样的工具可以通过几次点击将您的所有源文件从第一个表示法转换为第二个表示法(即使是免费试用版也可以做到这一点)。

编辑:

我忘了您正在使用代码生成器。然后你有这些选择:

  1. 更改 Thrift 的模板(我不熟悉该工具,但我希望它有某种模板)。
  2. 编写一个工具,将 usings 从 namespace 外部移动到内部。这应该是单个 Regex.Replace 调用。
  3. 编写一个工具来读取串联文件并将所有使用项移至顶部。同样,这应该非常简单。

关于C#源文件合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216445/

相关文章:

c# - 为什么二进制序列化需要将对象标记为可序列化?

scala - 为 Scala val/var/def 插入推断类型注释

c++ - C 和 Matlab : Why does this one line in Matlab become so many lines in C++ code generated by Matlab Coder?

c# - 为什么我不能在类上使用 ConditionalAttribute?

c# - Datagridview 和选项卡控件问题

c# - IEqualityComparer.Equals 的实现是否应该允许空值?

java - 拦截来自特定命名空间的所有方法/构造函数/getters/setters

c# - 如何在 C# 上为包装的 C++ 方法编写签名,该方法具有指向函数及其参数的指针?

.net - 隐藏在Visual Studio中的项目文件

c# - 为什么要创建从泛型列表 (.NET) 派生的类?