使用MSBuild 15发布ASP.NET Core

时间:2019-01-06 12:54:39

标签: c# asp.net-core msbuild

在我公司中,我们有一些使用.NET Framework(4.5.1)的项目,还有一个使用.NET Core的项目。

当前,所有.NET Framework项目都是使用MSBuild.exe(版本12)构建的,我希望将其更新为使用MSBuild 15,这样我就可以在.NET Framework和.NET Core项目中进行构建。相同的版本。

当前,当我仅构建我的.NET Core项目时,该构建可以成功编译。但是我希望将其发布,并且构建结果不是我想要的结果,因为它没有正确发布(构建结果位于以下文件夹中:bin,Properties,Views,wwwroot和配置文件)。

我不知道我在这里做错了什么,我已经在网上搜索了几天,但仍然无法弄清楚我做错了什么。请指教。

注意:首先要进行构建,我必须在.NET Core的项目.csproj文件中添加以下几行,以便在构建时不会失败:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" Condition="true" />

执行构建的命令行

"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild" DailyBuild.proj /t:DailyBuild /p:VersionNumber=15

DailyBuild.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <SourcesPath>$(MSBuildProjectDirectory)\..\..\</SourcesPath>
    <CSCleanProperties>BuildType=Clean;Configuration=Release;IsFormalBuild=true</CSCleanProperties>
    <CSBuildProperties>BuildType=ReBuild;Configuration=Release;PauseBuildOnError=false;PublishWebSites=true;VersionName=Prod-$(VersionNumber)</CSBuildProperties>
  </PropertyGroup>

  <Target Name="DailyBuildWithClean">
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make2.proj" Targets="Clean" Properties="$(CSCleanProperties)"/>
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make2.proj" Properties="$(CSCleanProperties)"/>
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make2.proj" Targets="FormalBuild" Properties="$(CSBuildProperties)"/>
  </Target>

  <Target Name="DailyBuild">
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make2.proj" Targets="SW;PreparePackFolder" Properties="$(CSBuildProperties)"/>
  </Target>

</Project>

Make2.proj

<Project DefaultTargets="SW" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets="CreateProperties;Clean">
  <ItemGroup>
    <SourcesPathItem Include='$(MSBuildProjectDirectory)\..\..\' />
  </ItemGroup>
  <PropertyGroup>
    <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\MSBuild.Community.Tasks.v1.4.0.88</MSBuildCommunityTasksPath>
  </PropertyGroup>  
  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
  <PropertyGroup>
    <Configuration>Debug</Configuration>
    <Platform>x86</Platform>
    <CSConfiguration>$(Configuration)</CSConfiguration>
    <BuildType Condition=" '$(BuildType)' == '' ">Build</BuildType>
    <PauseBuildOnError>true</PauseBuildOnError>
    <PublishWebSites>false</PublishWebSites>
    <IsFormalBuild>false</IsFormalBuild>
    <VersionName>Prod</VersionName>
  </PropertyGroup>
  <Target Name="CreateProperties" >
    <CreateProperty Value="%(SourcesPathItem.Fullpath)Src\">
      <Output PropertyName="SourcesPath" TaskParameter="Value"/>
    </CreateProperty>
    <CreateProperty Value="%(SourcesPathItem.Fullpath)Artifacts\">
      <Output PropertyName="MainArtifactsFolder" TaskParameter="Value"/>
    </CreateProperty>
    <CreateProperty Value="%(SourcesPathItem.Fullpath)Packages\">
      <Output PropertyName="PackageFolder" TaskParameter="Value"/>
    </CreateProperty>
    <CreateProperty Value="%(SourcesPathItem.Fullpath)Artifacts\DeployedArtifacts\">
      <Output PropertyName="DeployedPackageFolder" TaskParameter="Value"/>
    </CreateProperty>
    <CreateProperty Value="%(SourcesPathItem.Fullpath)Src\Util\InspectorWebService\InspectorWebService\Publish\">
      <Output PropertyName="InspectorWebServicePublishPath" TaskParameter="Value"/>
    </CreateProperty>

  </Target>
  <PropertyGroup>
    <CSPlatformIndependentProjectProperties>Configuration=$(CSConfiguration);Platform=AnyCPU</CSPlatformIndependentProjectProperties>
    <CSPlatformSpecificProjectProperties>Configuration=$(CSConfiguration);Platform=$(Platform)</CSPlatformSpecificProjectProperties>
    <VCConfiguration>Configuration=$(CSConfiguration);Platform=Win32</VCConfiguration>
  </PropertyGroup>


    <Target Name="InspectorWebService">
    <RemoveDir Directories="$(InspectorWebServicePublishPath)"/>
    <MSBuild Projects="$(SourcesPath)Util\InspectorWebService\InspectorWebService\InspectorWebService.csproj" Targets="$(BuildType)" Properties="$(CSPlatformIndependentProjectProperties)"/>
    <MSBuild Condition=" '$(BuildType)' != 'Clean' And '$(PublishWebSites)' == 'true' " Projects="$(SourcesPath)Util\InspectorWebService\InspectorWebService\InspectorWebService.csproj"
             Targets="ResolveReferences;_WPPCopyWebApplication" Properties="WebProjectOutputDir=$(InspectorWebServicePublishPath);BuildingProject=true" />
  </Target>
  <PropertyGroup>
    <AllProcessesTargets>
      InspectorWebService;
    </AllProcessesTargets>
  </PropertyGroup>
  <Target Name="SW">
    <CallTarget Targets="$(AllProcessesTargets)" RunEachTargetSeparately="false"/>
    <OnError ExecuteTargets="PauseBuild"/>
  </Target>
  <Target Name="FormalBuild">
    <CallTarget Targets="SW;PreparePackFolder;Pack"/>
    <OnError ExecuteTargets="ErrorHandler"/>
  </Target>
  <Target Name="PreparePackFolder">
    <RemoveDir Directories="$(MainArtifactsFolder)" />
    <MakeDir Directories="$(MainArtifactsFolder)" />  

    <MSBuild Projects="$(MSBuildProjectFile)" Targets="PreparePackFolderInternal" Properties="ArtifactFormat=Old;MixedArtifiactFolder=$(MainArtifactsFolder)MixedArtifacts\"/>
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="PreparePackFolderInternal" Properties="ArtifactFormat=New;MixedArtifiactFolder=$(MainArtifactsFolder)DeployedArtifacts\"/>
   </Target>
  <Target Name="PreparePackFolderInternal">
    <CallTarget Targets="PrepareInspectorWebServiceToPack;PrepareOtherFolders"/>
  </Target>
  <Target Name="CopyDefaultFiles">
    <Exec Condition=" '$(ArtifactFormat)' == 'Old'" Command="xcopy &quot;$(CompleteBinFolder)*.*&quot; &quot;$(MixedArtifiactFolder)$(ComponenetName)\Binaries&quot; /I /Y /D /E /F"/>
    <Exec Condition=" '$(ArtifactFormat)' == 'New'" Command="xcopy &quot;$(CompleteBinFolder)*.*&quot; &quot;$(MixedArtifiactFolder)$(ComponenetName)&quot; /I /Y /D /E /F"/>
    <ItemGroup>
      <GeneralConfigFiles Include="$(MixedArtifiactFolder)$(ComponenetName)\Binaries\*.config"/>
      <PDBFiles Include="$(MixedArtifiactFolder)$(ComponenetName)\**\*.pdb"/>
    </ItemGroup>
    <Move Condition=" '$(ArtifactFormat)' == 'Old'" SourceFiles="@(GeneralConfigFiles)" DestinationFolder="$(MixedArtifiactFolder)$(ComponenetName)\Configurations"/>
    <Move Condition=" '$(ArtifactFormat)' == 'New'" SourceFiles="@(PDBFiles)" DestinationFolder="$(MainArtifactsFolder)PDBs\$(ComponenetName)"/>
    <Delete Condition=" '$(ArtifactFormat)' == 'Old'" Files="@(PDBFiles)"/>
  </Target>

  <Target Name="PrepareInspectorWebServiceToPack" Condition=" '$(BuildType)' != 'Clean' ">
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="CopyDefaultFiles" Properties="CompleteBinFolder=$(InspectorWebServicePublishPath);ComponenetName=InspectorWebService"/>
  </Target>


  <Target Name="PrepareOtherFolders">
    <Exec Command="xcopy &quot;$(SourcesPath)..\Certificates\*.*&quot; &quot;$(MixedArtifiactFolder)Certificates&quot; /I /Y /D /E /F"/>
    <Exec Command="xcopy &quot;$(SourcesPath)\Resources\CCI\*.*&quot; &quot;$(DeployedPackageFolder)CCI\Configuration\&quot; /I /Y /D /E /F"/>
  </Target>
  <Target Name="Pack" Condition=" '$(BuildType)' != 'Clean' ">
    <RemoveDir Directories="$(PackageFolder)" />
    <MakeDir Directories="$(PackageFolder)" />


    <ItemGroup>
      <InspectorWebServiceFilesForZip Include="$(DeployedPackageFolder)InspectorWebService\**\*.*" Exclude="$(DeployedPackageFolder)InspectorWebService\**\*.pdb" />
    </ItemGroup> 
    <Zip ZipFileName="$(PackageFolder)$(VersionName)-InspectorWebService.zip" WorkingDirectory="$(DeployedPackageFolder)InspectorWebService" Files="@(InspectorWebServiceFilesForZip)" ZipLevel="9" ParallelCompression="false" />



    <ItemGroup>
      <AllZipFiles Include="$(DeployedPackageFolder)\**\*.*" Exclude="$(DeployedPackageFolder)\**\*.pdb" />
    </ItemGroup> 
    <Zip ZipFileName="$(PackageFolder)$(VersionName)-!All.zip" WorkingDirectory="$(DeployedPackageFolder)" Files="@(AllZipFiles)" ZipLevel="9" ParallelCompression="false" />

    <ItemGroup>
      <AllPDBFiles Include="$(MainArtifactsFolder)PDBs\**\*.pdb"/>
    </ItemGroup> 
    <Zip ZipFileName="$(PackageFolder)$(VersionName)-!PDBForAll.zip" WorkingDirectory="$(MainArtifactsFolder)PDBs" Files="@(AllPDBFiles)" ZipLevel="9" ParallelCompression="false" />

  </Target>
  <Target Name="Clean" Condition=" '$(BuildType)' == 'Clean' ">
    <RemoveDir Directories="$(InspectorWebServicePublishPath)"/>
    <RemoveDir Directories="$(PackageFolder)"/>
    <RemoveDir Directories="$(MixedArtifiactFolder)"/>
  </Target>
  <Target Name="PauseBuild" Condition=" '$(PauseBuildOnError)' == 'true' ">
    <Prompt Text="Press any key to continue ..." />
  </Target>
  <Target Name="ErrorHandler">

  </Target>
</Project>

0 个答案:

没有答案