如何在本地调试时包含webjob文件,但在发布Web包时排除?

时间:2017-12-10 03:47:58

标签: visual-studio msbuild web-deployment target azure-webjobs

我正在使用Visual Studio 2017并拥有一个包含多个Web项目和webjob项目的解决方案。

在我希望排除作为Web发布包的一部分进行部署的开发环境中本地运行时,我想要包含一些文件。< / p>

我试图使用此处描述的流程http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx和其他地方,即:

  <ItemGroup>
    <ExcludeFromPackageFiles Include="connectionstrings.config">
      <FromTarget>Project</FromTarget>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </ExcludeFromPackageFiles>
  </ItemGroup>

这对我的Web项目非常有效 - 这意味着在构建connectionstrings.config文件时会将其复制到我的bin\目录而不包含在Web部署包中 - 而在我的webjob项目中实现该文件时被复制到我的bin\目录,但也包含在部署包中。

在msbuild输出中,我看到:

  

从&#34; C:\ Users \ me \ Documents \ Projects \ myapp \ myapp \ webjob1 \ connectionstrings.config&#34;复制文件to&#34; bin \ ProdBuildCfg \ connectionstrings.config&#34;。

这就是我想要的,因为它允许我在本地运行/调试,还有:

  

将C:\ Users \ me \ Documents \ Projects \ myapp \ myapp \ webjob1 \ bin \ ProdBuildCfg \ connectionstrings.config复制到obj \ ProdBuildCfg \ Package \ PackageTmp \ app_data \ jobs \ continuous \ webjob1 \ connectionstrings.config。< / p>

演示了这个问题 - connectionstrings.config仍然被复制到包目录以供后续发布/部署。

上述文章和其他文章中描述的过程适用于网络项目,它们表明您应将<ItemGroup>置于

之下

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

项目文件的行。 Webjob项目不包括那条线,而是有类似的东西:

<Import Project="..\packages\Microsoft.Web.WebJobs.Publish.1.0.13\tools\webjobs.targets" Condition="Exists('..\packages\Microsoft.Web.WebJobs.Publish.1.0.13\tools\webjobs.targets')" />

我怀疑问题与目标有关 - 要么我的项目文件没有包含正确的<Import Project="...*.targets')" />行,要么我不在文件的正确位置。

接下来,我尝试了这里提到的方法How do I include webjob files while debugging locally but exclude when publishing a web package?

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">  
 <ExcludeFilesFromDeployment>connectionstrings.config</ExcludeFilesFromDeployment>
</PropertyGroup>

我有connectionstrings.config Build Action设置为NoneCopy to output directory设置为Always(我的理解是Copy to output directory设置产生的操作明显不同来自与打包/部署相关的操作)。结果相同。 (我已经确保我在我的构建配置的<PropertyGroup>右侧。

注意:我通过右键单击VS中的项目并选择&#34; Publish as Azure webjob&#34;来部署。或使用msbuild命令发布msbuild myproj.csproj /p:DeployOnBuild=true /p:Configuration=Release /p:PublishProfile="Prod" /p:VisualStudioVersion=15.0 /p:Password=

1 个答案:

答案 0 :(得分:0)

  

如何在本地调试时包含webjob文件,但在发布Web包时排除?

据我所知,如果您不想发布任何文件,只需将文件属性设置为&#34; 复制到输出目录不要复制&#34 ;.这样,当您打包应用程序时,特定文件将不是包的一部分,并且永远不会在Azure上。

<强>更新

  

不幸的是,该设置会阻止将文件复制到   输出目录,这意味着我无法在本地运行或调试。

调试项目时,可以设置&#34; copy to output directory&#34; as&#34; Copy always&#34;。如果要部署项目,可以手动清除构建并将值更改为DO NOT COPY

如果你不想手动完成所有这些操作,我想为你提供一个解决方法,希望这可以帮助你。

要完成此操作,请卸载您的项目。然后在项目的最后,就在结束标记之前,放在脚本下面:

  <Target Name="ExcludeFileFromPackage" BeforeTargets="PipelineCopyAllFilesToOneFolderForMsdeploy">
    <Message Text="Delete the connectionstrings.config from Obj folder to exculde this file in the package directory" />

    <Delete Files="$(ProjectDir)obj\Release\Package\PackageTmp\connectionstrings.config" />
  </Target>

使用此目标,VS / MSBuild将在将项目作为包发布之前从obj文件夹中删除connectionstrings.config