首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual studio web部署在发布过程中删除dll

Visual studio web部署在发布过程中删除dll
EN

Stack Overflow用户
提问于 2016-09-30 13:53:24
回答 2查看 1.6K关注 0票数 0

我有下面的nant脚本来进行构建和部署:

代码语言:javascript
复制
<msbuild project=".\Code\Code.sln" target="Build">
    <property name="Configuration" value="${Build.Configuration}" />
    <property name="Platform" value="${build.platform}" />
    <property name="CreatePackageOnPublish" value="true" />
    <property name="DeployOnBuild" value="true" />
    <property name="DeployIISAppPath" value="Default Web Site\${Web.Path}" />
</msbuild>

<exec program=".\Code\CodeWeb\obj\${Build.Configuration}\Package\CodeWeb.deploy.cmd" commandline="/y /m:webhost.mycompany.com /u:DOMAIN\user /p:password"/>

我的问题是:当我在Debug或RC构建配置中部署时,一切都正常。所有文件都出现在发布目录中,代码将被更新。但是,当我在发行版配置中部署时,发布过程会删除站点运行所需的三个.dlls。

同样的代码是为所有构建配置构建和发布的,所以我不认为这是问题所在。而且,我不知道我的发布概要文件是否是问题的根源,但如果是的话,唯一值得注意的区别是,Production.pubxml.user包含一个<ItemGroup>元素,其中包含大量<File>子元素,列出了Development.pubxml.user不包含的文件。但是,我将<ItemGroup>从Production.pubxml.user复制到Development.pubxml.user中,它并没有破坏开发发布过程。

我的msdeploy.exe日志在产品发布时是这样启动的

代码语言:javascript
复制
SetParameters from:
"C:\Shared\Code\CodeWeb\obj\Release\Package\CodeWeb.SetParameters.xml"
You can change IIS Application Name, Physical path, connectionString
or other deploy parameters in the above file.
-------------------------------------------------------
 Start executing msdeploy.exe
-------------------------------------------------------
 "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -source:package='C:\Shared\Code\CodeWeb\obj\Release\Package\CodeWeb.zip' -dest:auto,computerName="webhost.mycompany.com",userName="DOMAIN\user",password="password",includeAcls="False" -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"C:\Shared\Code\CodeWeb\obj\Release\Package\CodeWeb.SetParameters.xml" 
Info: Using ID '52641dbe-b1e5-4ff5-9962-01386a7fe513' for connections to the remote server.
Info: Deleting file (Default Web Site\CodeStaging\bin\System.Net.Http.Formatting.dll).
Info: Deleting file (Default Web Site\CodeStaging\bin\System.Web.Http.dll).
Info: Deleting file (Default Web Site\CodeStaging\bin\System.Web.Http.WebHost.dll).

在dev发布中,它只是不删除这些文件。我已经对.deploy.cmd文件、msbuild生成的文件进行了不同的处理,并在.zip包上进行了文件夹级别的比较,这些包部署了.deploy.cmd文件,但我似乎找不到任何值得提及的差异。

经过进一步调查,只有在我从生产机器构建msdeploy包时,文件才会被删除。如果我在生产机器和Dev机器上签出主干/并运行下面的构建和部署代码,那么从Dev机器部署到任何环境中都是正确的,并且从生产机器部署到任何环境都会删除所需的程序集。有什么全局的msdeploy设置被搞砸了吗?另外,如果你能回答这个问题,也许可以看看我的other, similar one

有人能解释为什么如果从我的生产机器上运行相同的代码就会破坏我的部署,但是如果从我的dev机器上运行的话,那么无论我部署到哪个环境,都能很好地工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-30 16:56:53

我不完全确定为什么这会起作用,因为缺少的程序集不在故障机器上的GAC中,而是添加

代码语言:javascript
复制
<Private>True</Private>

在我的.csproj文件中对这些缺少的程序集的引用中,每个引用都对其进行了修正。引用现在如下所示:

代码语言:javascript
复制
<Reference Include="System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.WebApi.Client.4.0.20710.0\lib\net40\System.Net.Http.Formatting.dll</HintPath>
</Reference>

http://bronumski.blogspot.com/2009/06/project-reference-fun-and-games.html提供

票数 1
EN

Stack Overflow用户

发布于 2016-09-30 14:18:50

这是发布设置的一部分,

如果要进行构建,则发布{project名称}

这将打开一个对话框窗口。

转到“设置”和“文件发布”选项,您将看到一个选项,在发布之前删除所有现有文件。如果您不希望它在部署时删除您的文件,请取消此选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39793188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档