我正在使用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设置为None
而Copy 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=
答案 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
。