Как объединить простые файлы .cs в один файл .cs со всеми использованиями вверху, чтобы он компилировался - PullRequest
1 голос
/ 09 мая 2020

Итак, я знаю, что в целом это невозможно, потому что Джон Скит так сказал .

Но мои файлы .cs представляют собой простые классы с одним или двумя вариантами использования вверху. И мне нужен один файл со всеми классами в нем, чтобы я мог вставить его в IDE веб-браузера в виде одного файла для компиляции и запуска.

Я пробовал использовать PowerShell и просто скопировал все файлы в один вроде этого :

get-content *.cs | out-file bigBadFile.cs

Но этот файл не будет компилироваться, потому что он имеет использование в середине, что недопустимо:

CS1529: Предложение using должно предшествовать всем другим определенным элементам в пространстве имен, кроме объявлений внешних псевдонимов

Если вам интересно, зачем мне это нужно - это для платформы CodinGame, и мне надоело хранить весь свой код в одном файле.

Примеры файлов для объединения:

GameData.cs:

using System.Collections.Generic;

public class GameData
{
    public GameData(int width, int height)
    {
       ...
    }

    public int Width { get; set; }
    public int Height { get; set; }
    public List<int> List { get; set; }
    ...
}

Player.cs:

using System;
using System.Linq;
using System.Text;
using System.Collections.Generic;

public class Player
{
    private static string[] inputs;
    private static bool isFirstTurn = true;
    public static StringBuilder MoveBuilder;

    public static GameData Game;

    static void Main()
    {
     ...
    }
}

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Просто чтобы предложить более краткую и быструю PSv4 + альтернативу на ваш собственный полезный ответ :

$usings, $rest = (Get-Content *.cs).Where({ $_ -match '^\s*using\s' }, 'Split')

# Encoding note: Creates a BOM-less UTF-8 file in PowerShell [Core] 6+,
#                and an ANSI file in Windows PowerShell. Use -Encoding as needed.
Set-Content bigBadFile.txt -Value (@($usings | Select-Object -Unique) + $rest)
1 голос
/ 09 мая 2020

Наконец-то мне это удалось. Эти команды PowerShell сработали для меня:

get-content *.cs | where { $_ -match "^using" } | Select-Object -Unique | out-file bigBadFile.txt
get-content *.cs | where { $_ -notmatch "^using" } | out-file -append bigBadFile.txt

Итак, что я делаю здесь, я беру все использования из всех файлов и помещаю их в bigBadFile.txt. Затем я беру весь код из всех файлов без использования и добавляю его в bigBadFile.txt

Результат работает для меня, , хотя он дублировал операторы с использованием . Я добавил | Select-Object -Unique, как предложил Тео в своем комментарии, чтобы избежать дублирования. .cs файлы (что необычно, вы можете просто изменить это на "^[ ]*using".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...