MSDeploy包有缺少的文件(MSDeploy Package has Missing Files

2019-09-20 11:31发布

我使用的MSBuild建立一个Web应用程序项目,并添加参数创建包文件。 所有这一切都还是不错的。 我得到了两个文件夹_PublishedWebSites输出:

AppName
AppName_Package

ApplicationName的文件夹,整个网站是存在的,我可以在这个文件夹上简单地复制到网站,它将会运行。

在包文件夹中我已经得到了预期的5个文件:

AppName.deploy.cmd
AppName.-readme.txt
AppName.SetParameters.xml
AppName.SourceManifest.xml
AppName.zip

然而,当部署包,Web应用程序的DLL( AppName.dll )丢失,因为有一些其他的重要参考依赖。

检查包装本身并没有透露这些文件其实都是从web应用程序缺少bin目录。

这是很奇怪的,考虑到文件都在根AppName文件夹,而不是在发现包AppName_Package文件夹。

唯一MSDeploy有关修改我做的是,我重写CopyAllFilesToSingleFolderForPackageDependsOn目标从库项目中的一些处理程序进行复制,而这一切都很好地工作。

<PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
        CustomCollectFiles;
        $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
    <ItemGroup>
        <_CustomFiles Include="..\Libraries\CodeLibrary1\**\*.ashx" />
        <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>$(ProjectDir)%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
        </FilesForPackagingFromProject>
    </ItemGroup>
</Target>

所以,我不能确定为什么Web应用程序的DLL,只有少数其他(仅供参考),DLL是从去除bin目录在打包过程(但不是全部-也许3%)。

任何想法,我应该在日志文件中找?

编辑:(回应赛义德):

我很欣赏你回答我的职务。 不幸的是我不知道我们是在同一页上。 就像我说的,我可能没有解释我的问题不够好,其实线索别人对我的问题到底是什么。 让我再试一次澄清

获取复制到我的web应用程序的外部文件不是问题。 我明白了我的职位,扫描,看到太常见“CopyAllFilesToSingleFolderForPackageDependsOn”元素掀起了几个红旗,报警铃和whisles。 。 这似乎是人们疲于应付常见的事情,正如你指出的那样,出现了一些问题,它正在执行。 这对我的工作确定。

我的问题更多的是与项目中引用的DLL,而且最重要的应用程序DLL本身不被复制。

今天各地更多的调整已显露一些我不知道的。 例如:

开球上TFS一个生成输出有两件事情:

  1. 从TFS源输出到源目录(SourceDir)

    • 这仅包含了什么签入TFS输出
    • 这不包括项目或文件引用,只是什么TFS承诺
  2. 构建的输出到两个文件夹

    • 二进制文件(包括项目和文件引用)
    • 源(仅包括什么/致力在TFS)

二进制里面我找到_publishedWebsites文件夹,以及所有项目和文件引用,而内源也有刚刚被签入TFS文件。

我的问题或困惑,在想,当我通过下面的参数的MSBuild参数,它将采取从构建(_PublishedWebsites)输出,并使用这些文件来创建包。 它没有做到这一点。

实际过程建立基于源文件夹中的文件的包。 所以,这里是我的困境/困惑,因为我没有犯我的应用程序的DLL到源,它没有被列入包,因此没有被被罚在测试服务器上测试网站。

/p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=RemoteAgent /p:MSDeployServiceUrl=http://<mytestsite> /p:DeployIisAppPath="<AppName>" /p:UserName=<domain\user> /p:Password=<mypassword> /p:SkipExtraFilesOnServer=false /p:AllowUntrustedCertificate=True

为了总结这件事,有一次我“结帐编辑”我的开发机器上我的应用程序的DLL,并将其编译的解决方案,最后提交应用程序的DLL到源代码控制,那么它被包含在包,因为它是作为只是一个源项。

所以,我想这与我的不理解如何让TFS的输出构筑成源文件夹中,并获得,其中包括成msdeploy使用的包装故障。

有可能是一些非常基本的,我错过了或者只是掠过 - 不理解的是,包创建是从源文件夹,而不是_PublishedWebsites文件夹。 我也不知道如何获得的MSBuild编译的应用程序的DLL和项目中引用的DLL,进入我的包 - 在源代码控制更换致力于源项目。

我希望这不是你完全是浪费时间,因为我错过了

source=<some-parameter>

某处。
我很感激你能告诉我到任何现有来源指出,已经解释这一点我应该能够绕过它我的头,并得到这个工作在哪里。 或者,如果它很容易,只是告诉我这里。

Answer 1:

The issue here is that the CopyAllFilesToSingleFolderForPackage target itself is not getting called from the VS2012 targets. We made a lot of changes and this may be a regression on our side. I will look into this to see if there is anything that we can do. Fortunately it should be pretty straight forward to update this to get the behavior that you are looking for. Instead of using CopyAllFilesToSingleFolderForPackageDependsOn you should be able to use PipelineCollectFilesPhaseDependsOn as an alternative. You should be able to change what you have above to

<PropertyGroup>
    <PipelineCollectFilesPhaseDependsOn>
      CustomCollectFiles;
      $(PipelineCollectFilesPhaseDependsOn);
      </PipelineCollectFilesPhaseDependsOn>    
</PropertyGroup>

<Target Name="CustomCollectFiles">
    <Message Text="Inside of CustomCollectFiles" Importance="high"/>
    <ItemGroup>
      <_CustomFiles Include="C:\Temp\_NET\WAP-AfterPublish\MvcApplication1\additional files\**\*" />

      <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>additional files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
</Target>

I just tried this for both VS2012 as well as VS2010 so this seems like a better to solution then the CopyAllFilesToSingleFolderForPackageDependsOn approach. Can you try that out and let me know what you find out?



文章来源: MSDeploy Package has Missing Files