Visual Studio Code Generation, основанный на проекте контент - PullRequest
3 голосов
/ 29 июля 2009

Мне интересно немного сгенерировать код на основе определенных файлов, присутствующих в .csproj. Какие методы расширения доступны для меня, чтобы я мог сгенерировать файл .cs, который будет скомпилирован вместе с моим проектом?

Предостережение : Я сразу подумал об использовании шаблонов T4 для этой задачи. Однако это решение должно поддерживаться в Visual Studio C # Express. Я считаю, что экспресс-версия не поддерживает шаблоны T4

Ответы [ 2 ]

4 голосов
/ 04 августа 2009

На C # Express ответ прост: нет.

C # Express не поддерживает расширения . Люди пытались раньше, и это стало ужасно. Адвокаты, бардак, все. Известный пример - TestDriven.NET .

Если вы не против сборки в командной строке, вы можете использовать пользовательскую задачу msbuild или команду pre-build / post-build.

В VS2005 / VS2008 («правильный») «пользовательский инструмент» - это один из способов; это включает в себя написание Package; Я сделал это недавно , и код открыт для проверки.

Т4 - это еще один вариант развития событий. Это не соответствовало моим потребностям, но могло бы удовлетворить ваши.


В качестве быстрой проверки событий сборки, я добавил (в экспресс-проекте) события до и после сборки (Свойства проекта -> События сборки):

echo $(TargetPath)

и

echo $(SolutionDir)
* * Соответственно тысяча двадцать восемь; нажмите build, и теперь вывод:
------ Build started: Project: ConsoleApplication10, Configuration: Release Any CPU ------
echo D:\SomePath\ConsoleApplication10.exe
D:\SomePath\ConsoleApplication10.exe
c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /unsafe+ /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:TRACE /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\ConsoleApplication10.exe /target:exe Form1.cs Form1.Designer.cs Form2.cs Form2.Designer.cs Program.cs Properties\AssemblyInfo.cs

Compile complete -- 0 errors, 0 warnings
ConsoleApplication10 -> D:\SomePath\ConsoleApplication10.exe
echo D:\SomePath
D:\SomePath
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Так что, кажется, работает нормально (то есть оба события были выполнены). Не элегантно, но выполнимо. Макросы должны позволять вам (с некоторыми покерами) доступ к элементам проекта, например $(ProjectPath)SomeFile.xml

2 голосов
/ 05 августа 2009

Вы можете открыть файл csproj (это всего лишь скрипт msbuild) и добавить также собственные цели.

Существует две цели по умолчанию, которые вы можете переопределить для этой цели: BeforeBuild и AfterBuild (может быть, больше, но я не уверен в других).

Вы также можете включать пользовательские библиотеки DLL в новые задачи msbuild, хотя это приведет к появлению предупреждения безопасности при открытии проекта, если вы не добавите библиотеку DLL в список безопасных импортов msbuild (HKLM \ Software \ Microsoft \ Visual Studio \ 9.0 \ MSBuild \ SafeImports) , 8.0, если вы используете VS2005.

...