2016-10-23 3 views
0

enter image description hereПользовательской MSBuild цели не включая файлы в каталоге

Я добавил цель пользовательского MSBuild включить все файлы из определенной директории, однако после выполнения сборки они еще не включены.

<Target Name="BeforeBuild"> 
    <ItemGroup> 
     <!--<Content Include="Content\lib\**\*.js" /> 
     <Content Include="Content\lib\**\*.css" />--> 
     <Content Include="Content\lib\**" /> 
    </ItemGroup> 
    </Target> 

фон

(Попытка использовать беседку, чтобы получить компоненты затем включить их в проект без необходимости вручную добавить их)

[Asp.net 4.5.2, 5 MVC, Visual Studio 2015 (обновление 3)]

ответ

1

Первый Создание пользовательской задачи, как показано ниже

<Target Name="CustomCollectAngularFiles"> 
    <ItemGroup> 
     <WebFiles Include="Content\lib\**\*" /> 
     <FilesForPackagingFromProject Include="%(WebFiles.Identity)"> 
     <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
</Target> 

Затем добавьте группу свойств после <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />, которая доступна в вашем файле csproj, и она будет выглядеть ниже. Ключевым моментом здесь является CopyAllFilesToSingleFolderForMsdeployDependsOn

<PropertyGroup> 
    <CopyAllFilesToSingleFolderForMsdeployDependsOn> 
CustomCollectAngularFiles 
    </CopyAllFilesToSingleFolderForMsdeployDependsOn> 
    </PropertyGroup> 

Вы должны быть в состоянии видеть файлы получать копируются в сборку.

Для более подробной информации см https://blog.samstephens.co.nz/2010/10/18/msbuild-including-extra-files-multiple-builds/

+0

Ничего из того, что вы ответили, даже существует в моем файле .csproj. По внешнему виду вы только что отправились на какой-то случайный 6-летний блог-пост и скопировали фрагменты в ответ. – JARRRRG

+0

Я использовал указанную выше целевую и имущественную группу в своем текущем проекте и развертывал его до лазурного. Вы должны добавить их все в свой csproj. Вы можете найти ? . Затем добавьте приведенный выше код ниже, вы должны получить файлы во время развертывания. Оно работает. Будьте терпеливы и попробуйте, и я знаю, что msBuild расстраивает, пока это не сработает, как только оно сработает, вам не придется его снова трогать, очень беззвучно –

+0

У меня нет NuGet.targets в моем .csproj вообще. Также я не использую Azure. Я пытаюсь, чтобы эти файлы были автоматически включены в проект без необходимости нажатия «правого клика -> включить в проект» по существу. Поэтому, если какой-либо новый файл появляется в том же содержимом каталога \ lib, то этот новый файл автоматически включается в проект по крайней мере после сборки. – JARRRRG

1

На основании вашего описания, кажется, что вы хотите включить файлы в проект с помощью MSBuild, насколько я знаю, если это так, то я думаю, вам нужно использовать пользовательская задача сборки выглядит так:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> 
    <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" /> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 

    <UsingTask TaskName="Hello" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" > 
    <ParameterGroup /> 
    <Task> 
     <Reference Include="System.Xml" /> 
     <Reference Include="Microsoft.Build" /> 
     <Using Namespace="Microsoft.Build" /> 
     <Using Namespace="Microsoft.Build.Evaluation" /> 
     <Using Namespace="Microsoft.Build.Utilities" /> 
     <Code Type="Fragment" Language="cs"> 
      <![CDATA[ 
     string appPath = @"C:\Projects\MsBuild\App2\App2\App2.csproj"; 
     var project = new Project(appPath); 
     var loc = "test"; 
     project.AddItem("Folder", loc); 
     project.Save(); 
     Log.LogMessage("Hello, world!", MessageImportance.High); 
     ]]> 
     </Code> 
    </Task> 
    </UsingTask> 

    …… 
    <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
     Other similar extension points exist, see Microsoft.Common.targets. --> 
    <Target Name="BeforeBuild"> 
    <Hello /> 
    </Target> 
    <!--<Target Name="AfterBuild"> 
    <Message Text="About to run MsBuildTask" Importance="high" /> 
    <App2.MsBuildTask/> 
    </Target> 
    --> 
</Project> 
+0

Я сегодня вечером прогоню. – JARRRRG

Смежные вопросы