(После того, как кучка больше чтения я узнал, как это работает):
Visual Studio, похоже, не подвергать расширенные возможности редактирования проекта MSBuild, хотя современные vcxproj
файлы только файлы проекта MSBuild с кучей дополнительных помеченных свойств и других записей для особенностей среды разработки Visual Studio. Таким образом, вы должны взломать проект XML.
Чтобы сделать его более чистым, добавьте только одну строку в свой фактический файл vcxproj
- вставьте файл .targets
, который содержит остальную часть ваших настроек сборки. например, незадолго до конца файла проекта, вставки:
<Import Project="pg_sysdatetime.targets" />
</Build>
Теперь создайте файл .targets
с той же структурой, как и любой другой проект MSBuild.Вот мое от the project I've been working on:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- MSBuild extension targets for Visual Studio build -->
<PropertyGroup>
<DistDir>pg_sysdatetime_pg$(PGMAJORVERSION)-$(Configuration)-$(Platform)</DistDir>
</PropertyGroup>
<ItemGroup>
<DocFiles Include="README.md;LICENSE"/>
<ExtensionSourceFiles Include="pg_sysdatetime--1.0.sql;pg_sysdatetime.control"/>
<ExtensionDll Include="$(TargetDir)\pg_sysdatetime.dll"/>
</ItemGroup>
<Target Name="CopyOutputs">
<Message Text="Copying build product to $(DistDir)" Importance="high" />
<Copy
SourceFiles="@(DocFiles)"
DestinationFolder="$(DistDir)"
/>
<Copy
SourceFiles="@(ExtensionDll)"
DestinationFolder="$(DistDir)\lib"
/>
<Copy
SourceFiles="@(ExtensionSourceFiles)"
DestinationFolder="$(DistDir)\share\extension"
/>
</Target>
<Target Name="DeleteOutputs">
<Message Text="Deleting $(DistDir)" Importance="normal" />
<Delete Files="$(DistDir)"/>
</Target>
<!-- Attach to Visual Studio build hooks -->
<Target Name="BeforeClean">
<CallTarget Targets="DeleteOutputs"/>
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="CopyOutputs"/>
</Target>
</Project>
Это может содержать whatver задачи MSBuild вы хотите, сгруппированных в цели. Он также может иметь группы свойств, группы элементов и все, что поддерживает MSBuild.
Чтобы интегрировать в Visual Studio, вы добавляете специально именованные цели, которые вызывают то, что вы хотите. Здесь вы можете увидеть, что я определил цели BeforeClean
и AfterBuild
. Вы можете получить поддерживаемые цели из VS integration docs.
Теперь, когда я строю или перестраиваю, автоматически создается новый каталог, содержащий DLL продукта и кучу статических файлов, готовых к зашифровке. Если бы я хотел, я мог бы добавить пакет Nuget для расширений сообщества MSBuild и использовать задачу Zip, чтобы связать все это с zip-файлом и в конце.
BTW, в то время как вы можете определить свойства в своих .targets
файлах, лучше их определить в property sheets. Таким образом, они видны в пользовательском интерфейсе.
Помещение «Visual» Visual Studio в редактирование файлов MSBuild было бы серьезным делом с низкой отдачей. Он, однако, поддерживает его достаточно хорошо, просто используйте File + Open + File, выберите файл проекта. Нажмите стрелку на кнопке «Открыть», выберите «Открыть с» и выберите редактор XML. Возможно, вам придется выгрузить проект, если он загружен в настоящий момент. Остерегайтесь, что это похоже на подростковый секс, одна ошибка, и вы будете поддерживать ее всю оставшуюся жизнь. –
Я редактирую XML-файлы в Notepad ++ и не должен сначала выгружаться. При изменении перезагрузка VS или подключаемый модуль VSCommands обнаруживает и перезагружает все решение. Только порой для включенного файла (например, реквизита) мне нужно закрыть решение вручную; даже при этом, создание видит последние файлы, даже если среда IDE не обновилась. –