2009-05-21 12 views
24

Mam skrypt, który przekonwertuje plik tekstowy na plik zasobu, dzięki czemu mogę obsługiwać wiele języków, ponieważ pliki tekstowe dla różnych języków są konwertowane na różne zasoby. Po uruchomieniu skryptu, aby uzyskać plik resx, muszę uruchomić niestandardowe narzędzie do kompilacji (jak opisano tutaj: Link to Code Project) w celu utworzenia plików Designer.cs w celu korzystania z nowych plików.Uruchom narzędzie niestandardowe programu Visual Studio w czasie kompilacji

Zgodnie z filozofią, że powinienem był w stanie zbudować cały projekt jednym kliknięciem, jak mogę usunąć krok, w którym muszę wyraźnie wywołać niestandardowe narzędzie do kompilacji w celu utworzenia plików codebehind?

Próbowałem automatycznie usuwać pliki Designer.cs jako etap wstępnej kompilacji, ponieważ sądzę, że narzędzie do kompilacji niestandardowej uruchomiłoby się automatycznie, gdyby nie było plików Designer.cs, ale nie kości.

Tak, chcę mój skrypt kompilacji w Visual Studio/msbuild zrobić: 1) konwersji tekstu do resx (zrobione) 2) przenieść pliki RESX do odpowiedniego katalogu (zrobione) 3) Utwórz designer.cs plików za pomocą narzędzie niestandardowe kompilacji (nie zrobione)

jest to ostatni etap ...

Odpowiedz

3

Niestety nie sądzę, istnieje łatwy sposób to zrobić. Niestandardowe narzędzia do budowania działają tylko z poziomu VS.NET - nie działają podczas budowania projektu za pomocą MSBuild z linii poleceń.

Ogólnie, jeśli masz wybór pisania narzędzia budowania jako narzędzia budowania klienta lub zadania MSBuild, wybierz zadanie MSBuild za każdym razem, gdy te zadania będą działać w VS.NET i z wiersza poleceń.

Pliki designer.cs dla zasobów służą do obsługi kodowania. Dają ci mocno wpisany dostęp do pliku zasobów. Tak więc, dopóki tworzysz niezmienne zasoby kultury w VS.NET (i pozwól im tworzyć pliki .designer.cs), to późniejsze dodanie dodatkowej obsługi języka (dodatkowe pliki .resx) powinno działać dobrze.

Jeśli jednak twoje pliki tekstowe są głównymi plikami zasobów i najpierw dodajesz nowe ciągi zasobów do tych plików tekstowych, musisz znaleźć inny sposób generowania plików .cs, które pozwolą ci kodować przeciwko tym zasobom. Jeśli MUSISZ, generowanie pliku .designer.cs samodzielnie (lub coś podobnego) nie byłoby takie trudne. Korzystając z CodeDom lub T4, możesz utworzyć klasę pomocniczą, używając istniejącego pliku .designer.cs jako szablonu.

0

Czy próbowałeś dodać krok Exec w kroku Przed/PoBuild w swoim csproj? Musisz ręcznie edytować plik, ale to powinno rozwiązać twój problem.

Nie jestem w pełni jasny, jeśli chcesz to zrobić przed lub po kompilacji. Jeśli potrzebujesz tego zrobić za Pass1/Pass2, możesz bezpośrednio zahaczyć o cele. Spróbuj zajrzeć do Microsoft.Build.Common.Targets, aby dowiedzieć się, jak to zrobić.

2

Istnieje sposób na wygenerowanie pliku * .Designer.cs dla * .resx jako części procesu kompilacji. Istnieje wbudowane zadanie MSBuild GenerateResource, które zasadniczo jest opakowaniem wokół narzędzia SDK narzędzia resgen.exe. Here można znaleźć przykład, jak z niego korzystać.

Inną rzeczą, która może okazać się przydatna, jeśli wygenerowana wersja * .Designer.cs nie jest poprawna, w zasadzie zadanie GenerateResource nie wywołuje pożądanej wersji pliku resgen.exe, ustawienie właściwości SdkToolsPath może pomóc.

Powiązane problemy