【问题标题】:Include Files to be deployed not in project through msdeploy / F# Fake script通过 msdeploy / F# Fake 脚本包含未部署在项目中的文件
【发布时间】:2016-12-13 04:25:36
【问题描述】:

所以我有以下 Fake 脚本...

// include Fake lib
#r @"packages\FAKE.4.29.2\tools\FakeLib.dll"
open Fake

RestorePackages()

// define directories
let binDir = "./ProjFileFolder/bin/"
let objDir = "./ProjFileFolder/obj/Debug/"

let buildConf = getBuildParamOrDefault "conf" "Debug"
let buildNumber = getBuildParamOrDefault "bn" "0"
let buildVersion = "1.0.0." + buildNumber

let publishProfile = getBuildParamOrDefault "pubprofile" ""
let publishPassword = getBuildParamOrDefault "pubpwd" ""

let setParamsWeb = [
       "DebugSymbols", "True"
       "Configuration", buildConf
       "Platform", "Any CPU"
       "PublishProfile", publishProfile
       "DeployOnBuild", "true"
       "Password", publishPassword
       "AllowUntrustedCertificate", "true"
   ]

// Targets
Target "Clean" (fun _ ->
    CleanDirs [binDir; objDir]
)

Target "Compile" (fun _ ->
    !! @"**\*.csproj"
      |> MSBuild binDir "Build" setParamsWeb
      |> Log "AppBuild-Output: "
)

// Dependencies
"Clean"
    ==> "Compile"

// start build
RunTargetOrDefault "Compile"

我在 csproj 文件中创建了一些目标,以包含生成的 /docs doxygen 文档文件夹。这在最初使用我的旧 msdeploy 脚本时有效,这是一个 msdeploy 文件夹同步命令。他们在这里......

  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include=".\docs\**\*" />
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>docs\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

  <Choose>
    <When Condition="'$(Configuration)' == 'Debug'">
      <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
      </PropertyGroup>
    </When>
    <When Condition="'$(Configuration)' == 'QA'">
      <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
      </PropertyGroup>
    </When>
  </Choose>

如何确保 Fake 脚本执行相同的操作或执行 csproj 文件中的那些目标?它通过传递项目中要用于部署的天蓝色发布配置文件的名称来运行。

【问题讨论】:

    标签: f# msbuild msdeploy f#-fake


    【解决方案1】:

    所以在这种情况下,因为我正在部署到 azure,所以我能够将目标和属性组移动到发布配置文件,而不是直接将它们放在项目文件中。所以我最终在我们的发布配置文件中得到了以下内容。

    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <WebPublishMethod>MSDeploy</WebPublishMethod>
        <ADUsesOwinOrOpenIdConnect>False</ADUsesOwinOrOpenIdConnect>
        <PublishProvider>AzureWebSite</PublishProvider>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish>stuff</SiteUrlToLaunchAfterPublish>
        <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
        <ExcludeApp_Data>False</ExcludeApp_Data>
        <MSDeployServiceURL>stuff</MSDeployServiceURL>
        <DeployIisAppPath>more stuff</DeployIisAppPath>
        <RemoteSitePhysicalPath />
        <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
        <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
        <EnableMSDeployBackup>True</EnableMSDeployBackup>
        <UserName>more stuff</UserName>
        <_SavePWD>True</_SavePWD>
        <_DestinationType>AzureWebSite</_DestinationType>
      </PropertyGroup>
      <Target Name="CustomCollectFiles" BeforeTargets="Compile">
        <ItemGroup>
          <_CustomFiles Include=".\docs\**\*" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>docs\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
      <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
      </PropertyGroup>
      <PropertyGroup>
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
      </PropertyGroup>
    </Project>
    

    我们将发布配置文件导入项目,以便假脚本只接受发布配置文件的名称和发布密码,然后是我试图包含的 doxygen 文档,该文档是在构建前/构建后创建的事件是自动包含在内。我已将此添加到我们的 dev / qa 发布配置文件中,但没有添加到我们的生产发布配置文件中,因为我们不希望将其部署到产品中。但是很高兴在我们的开发/质量保证环境中自动部署并可用,任何人都可以访问。我在项目中包含了“docs”文件夹。不确定这是否会对它的工作方式产生任何影响。

    我按照本教程进行操作...https://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-extra-files。我想这是本教程的扩展...http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2015-02-18
      • 1970-01-01
      • 2011-04-27
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多