Piszę IDE do tworzenia gier, który tworzy i kompiluje projekty .NET (nad którymi pracuję od kilku ostatnich lat) i jestem w trakcie aktualizacji, aby wygenerować dane wyjściowe nie tylko dla Windows/Visual Studio, ale także dla Linux/MonoDevelop (ekscytująco prosty proces .NET, ale wciąż wymagający pewnych poprawek).Kto kopiuje plik app.config do pliku app.exe.config?
W związku z tym stwierdziłem, że konieczne jest rozpoczęcie generowania pliku app.config w celu odwzorowania zależnych nazw bibliotek DLL na nazwy zależności Linuksa z elementami <dllmap>. Nie wiem, kto jest odpowiedzialny za skopiowanie pliku app.config do pliku wyjściowego app.exe.config. W projekcie Visual Studio Build Action for app.config wydaje się normalnie mieć ustawioną wartość "None", a jego ustawienia wskazują, że nie będzie on kopiowany w dowolnym miejscu, ale gdy Visual Studio skompiluje projekt, generuje app.exe.config (chociaż czasami uważałem to za niewiarygodne). Kiedy używam MSBuild do zbudowania pliku rozwiązania wygenerowanego przez IDE (do celów debugowania), MSBuild kopiuje app.config do app.exe.config. Ale kiedy kompiluję projekt za pomocą CSharpCodeProvider.CompileAssemblyFromFile (oczywiście) nie podoba się plik konfiguracyjny dołączony jako kod źródłowy ("app.config (1,1): error CS0116: Przestrzeń nazw nie zawiera bezpośrednio takich elementów jak pola lub metody ") i oczywiście nie kopiuje go do wyjścia, gdy nie uwzględniam go jako danych wejściowych. Czy moim obowiązkiem jest samodzielne kopiowanie pliku app.config do pliku app.exe.config, czy też istnieje bardziej standardowy sposób robienia tego?
Czy podłączenie pierwszego pliku * .config jest nieogrodzone? W moim IDE można sobie wyobrazić zmianę nazwy pliku app.config lub dodanie innego (tak jak w Visual Studio). Wydaje mi się dziwne, że IDE ma tę tajną akcję dla plików konfiguracyjnych (myślę, że MonoDevelop zachowuje się podobnie pod tym względem, ponieważ nie mogłem znaleźć tam specjalnej akcji dla plików konfiguracyjnych). Nie wiem, jak to się dzieje, do jakich plików dotyczy ta tajna akcja.
Aby wyjaśnić moje pytanie jest, ponieważ używam CSharpCodeProvider do kompilacji kodu (bez uciekania się do polecenia powłoki, takie jak MSBuild do kompilowania projektu), co jest poprawny sposób uzyskać app.exe .config w danych wyjściowych? – BlueMonkMN
Proponuję użyć MSBuild w twoim IDE i utworzyć zadania MSBuild dla dowolnego wygenerowanego przez ciebie specjalnego wyjścia do kompilacji, którego MSBuild nie obsługuje. Umożliwiłoby to MSBuildowi kompilację z Twoimi rozwiązaniami. Dodatkowo ułatwiłoby to integrację twojego produktu z ciągłą integracją, taką jak TeamCity. – grover
MSBuild może już skompilować moje rozwiązania. A kiedy już to zrobi, już poprawnie obsługuje app.config. CSharpCodeProvider wydaje się być bardziej bezpośrednim rozwiązaniem z mniejszym narzutem niż wysyłanie do MSBuild. IDE generuje plik rozwiązania, ale nie używa go podczas kompilacji wewnętrznej. – BlueMonkMN