Вы можете написать отдельный файл .msbuild (.proj) как «логику многократного использования».
У меня есть общая логика «zip up», которую я опубликую ниже. Мой пример был о том, чтобы закрепить сайт asp.net, но инкапсулируя правила о том, какие файлы игнорировать (например, .csproj) ....... и также иметь несколько «крючков» для игнорирования некоторых файлов. Как и в каталоге «images», наш был ОГРОМНЫМ, поэтому я не хотел запирать это каждый раз.
Мой пример напрямую не связан с вашими потребностями. Его идея важна. Инкапсулируйте всю свою логику в один файл и передайте ей параметры.
Я включаю файл .proj в файл Main.proj. Затем передайте ему параметры.
ОДНА ПЕЧА. Относительные каталоги НЕ работают в файле sub .proj, если он находится где угодно, кроме того же каталога, что и файл Main.proj.
Ala, вы не можете установить для свойства каталога что-то вроде «. \ Bin \», вам нужно выяснить полный путь ДО того, как вы вызываете файл sub-proj и передаете полное имя папки. Является ли этот пример, "C: \ моя_папка \ mysolution \ myproject1 \ Bin" ... иначе, независимо от е
код поместить в "вне" Main.proj файла:
<Target Name="ZipItUpUsingCommonLogic">
<Message Text=" " />
<Message Text=" About to Call External MSBUILD File " />
<Message Text=" " />
<MSBuild Projects="..\..\CommonLogicMsBuildStuff\WebSiteZippingCommonLogic.proj" Targets="WebSiteZippingAllTargetsWrapper" Properties="WebSiteFolderFullPath=c:\workstuff\mywebsolution;OutputFolderFullPath=c:\workstuff\buildoutputs;WebSiteZipFileNameNonConfig=MyNonConfigFiles$(Configuration).zip;WebSiteZipFileNameConfigFiles=MyWebSiteConfigFiles$(Configuration).zip;RevisionNumber=333;IgnoreFolder1=c:\workstuff\mywebsolution\images" />
</Target>
код для файл с именем «WebSiteZippingCommonLogic.proj»:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="WebSiteZippingAllTargetsWrapper">
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks" />
<!-- There was an issue with the xsl/document(path) function......this help address the issue. -->
<Target Name="WebSiteZippingAllTargetsWrapper">
<CallTarget Targets="ShowParameters" />
<CallTarget Targets="ValidateParameters" />
<CallTarget Targets="ZipTheWebSite" />
</Target>
<Target Name="ValidateParameters">
<Error Text="The WebSiteFolderFullPath property was not passed in correctly." Condition="'$(WebSiteFolderFullPath)' == ''" />
<Error Text="The OutputFolderFullPath property was not passed in correctly." Condition="'$(OutputFolderFullPath)' == ''" />
<Error Text="The WebSiteZipFileNameNonConfig property was not passed in correctly." Condition="'$(WebSiteZipFileNameNonConfig)' == ''" />
<Error Text="The WebSiteZipFileNameConfigFiles property was not passed in correctly." Condition="'$(WebSiteZipFileNameConfigFiles)' == ''" />
<!--<Error Text="The RevisionNumber property was not passed in correctly." Condition="'$(RevisionNumber)' == ''" />-->
</Target>
<Target Name="ShowParameters">
<Message Text=" WebSiteFolderFullPath = $(WebSiteFolderFullPath)" />
<Message Text=" OutputFolderFullPath = $(OutputFolderFullPath)" />
<Message Text=" WebSiteZipFileNameNonConfig = $(WebSiteZipFileNameNonConfig)" />
<Message Text=" WebSiteZipFileNameConfigFiles = $(WebSiteZipFileNameConfigFiles)" />
<Message Text=" IgnoreFolder1 = $(IgnoreFolder1)" />
<Message Text=" IgnoreFolder2 = $(IgnoreFolder2)" />
<Message Text=" IgnoreFolder3 = $(IgnoreFolder3)" />
<Message Text=" " />
<Message Text=" " />
</Target>
<Target Name="ZipTheWebSite" DependsOnTargets="ValidateParameters">
<ItemGroup>
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)\**\*.sln" />
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)\**\*.vbproj" />
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)\**\*.csproj" />
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)\**\*.config" />
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)\.svn\**\*.*" />
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)\obj\**\*.*" />
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)\**\.svn\**" />
<WebSiteExcludeFiles Include="$(WebSiteFolderFullPath)**\.svn\**\*.*" />
<WebSiteExcludeFiles Include="$(IgnoreFolder1)\**\*.*" Condition="'$(IgnoreFolder1)' != ''" />
<WebSiteExcludeFiles Include="$(IgnoreFolder2)\**\*.*" Condition="'$(IgnoreFolder2)' != ''" />
<WebSiteExcludeFiles Include="$(IgnoreFolder3)\**\*.*" Condition="'$(IgnoreFolder3)' != ''" />
</ItemGroup>
<ItemGroup>
<WebSiteNonConfigIncludeFiles Include="$(WebSiteFolderFullPath)\**\*.*" Exclude="@(WebSiteExcludeFiles)">
</WebSiteNonConfigIncludeFiles>
</ItemGroup>
<MSBuild.Community.Tasks.Zip Files="@(WebSiteNonConfigIncludeFiles)" ZipFileName="$(OutputFolderFullPath)\$(WebSiteZipFileNameNonConfig)" WorkingDirectory="$(WebSiteFolderFullPath)\" />
<ItemGroup>
<WebSiteConfigIncludeFiles Include="$(WebSiteFolderFullPath)\**\*.config">
</WebSiteConfigIncludeFiles>
</ItemGroup>
<MSBuild.Community.Tasks.Zip Files="@(WebSiteConfigIncludeFiles)" ZipFileName="$(OutputFolderFullPath)\$(WebSiteZipFileNameConfigFiles)" WorkingDirectory="$(WebSiteFolderFullPath)\" />
<Message Text=" " />
<Message Text=" " />
</Target>
</Project>
Если вы не хотите, чтобы инкапсулировать правила в отдельный файл, то вы можете искать это:
http://sstjean.blogspot.com/2006/09/how-to-get-msbuild-to-run-complete.html
Тем не менее, я нахожу постоянным «проверка состояния» раздражающим, поэтому я перешел к методу «по файлу», который я описал выше.
Я собираюсь скопировать/вставить его пример здесь, на всякий случай, когда его блог когда-либо опускается. Помните «gotdotnet.com» ??
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Package Include="CommonWebSetup.ism">
<PackagerType>IS</PackagerType>
<SetupProjFolder>CommonWebSetup</SetupProjFolder>
<ISProductConfig>Server</ISProductConfig>
<ISReleaseConfig>Release</ISReleaseConfig>
</Package>
<Package Include="CommonClientSetup.vdproj">
<PackagerType>VS</PackagerType>
<SetupProjFolder>CommonClientSetup</SetupProjFolder>
<ISProductConfig>Client</ISProductConfig>
<ISReleaseConfig>Release</ISReleaseConfig>
</Package>
</ItemGroup>
<Target Name="Test" Outputs="%(Package.Identity)" >
<Message Text="Removing read-only flag for %(Package.Identity)" Importance="High" />
<Message Text="Setting Environment variable for %(Package.Identity)" Importance="High" />
<Message Condition=" '%(Package.PackagerType)' == 'IS' "
Text="Running InstallShield for %(Package.Identity)" Importance="High" />
<Message Condition=" '%(Package.PackagerType)' == 'VS' "
Text="Running DevEnv.exe for %(Package.Identity)" Importance="High" />
</Target>
Благодарим за подробный ответ, но это не то, что я ищу. У нас есть аналогичная настройка для zip наших файлов сборки, и все это самодостаточно в одном файле .msbuild, и это то, что мне нужно сделать. Все, что я хочу сделать, это вызвать цель несколько раз с разными параметрами, которые, как я думал, попадут в основы любого языка программирования, пока я не встретил MSBuild .... – ShaneC
Мой ответ был добавлен. – granadaCoder
Использование «Идентичность» или запись отдельного файла ... это как ваши варианты ......... насколько я знаю. – granadaCoder