2012-07-30 75 views
2

我正在使用MSBuild构建一个Web应用程序项目并添加参数来创建包文件。所有这一切都很好。我得到两个文件夹中_PublishedWebSites输出:MSDeploy包丢失文件

AppName的

AppName_Package

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

在包文件夹中我已经得到了预期的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% )。

任何想法我应该在日志文件中寻找什么?

问候

EDIT(回应赛义德):

我很欣赏你回答我的职务。不幸的是我不确定我们在同一页面上。就像我说过的,我可能没有足够好地解释我的问题,从而不能真正地向他人介绍我的问题。让我再试一次来澄清

将外部文件复制到我的Web应用程序不是问题。我知道扫描我的帖子并看到所有常见的“CopyAllFilesToSingleFolderForPackageDependsOn”元素引发了一些红旗,警报,钟声和呜呜声。 。这似乎是人们正在努力的一件常见事情,正如你所指出的那样,它正在执行中遇到了一些问题。这对我来说行得通。

我的问题有更多与项目引用的DLL有关,最重要的是应用程序DLL本身没有被复制。

今天周围更多的调整显示了一些我不知道的东西。例如:

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

  1. 从TFS源输出到源目录(SourceDir) 一个。这只包含输入什么检查到TFS B。这不包括项目或文件参考,仅限于TFS中提交的内容
  2. 构建的输出分为两个文件夹 a。二进制文件(包括项目和文件参考) b。源(TFS中只包括什么/承诺)

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

我的问题或混乱,认为当我将以下参数传递给MSBuild参数时,它将从构建(_PublishedWebsites)的输出并使用这些文件来创建包。它不这样做。

实际进程根据SOURCES文件夹中的文件构建一个包。所以,这里是我的困境/困惑,因为我没有将我的应用程序DLL提交到源代码中,它没有被包含在软件包中,因此没有被发送到测试服务器上的测试站点。

/P:DeployOnBuild =真/ P:DeployTarget = MsDeployPublish/P:CreatePackageOnPublish =真/ P:MSDeployPublishMethod = RemoteAgent/P:MSDeployServiceUrl = HTTP:///P:DeployIisAppPath = “”/ P:用户名=/p:Password =/p:SkipExtraFilesOnServer = false/p:AllowUntrustedCertificate = True

为了解决这个问题,一旦我“开始编辑”我的应用程序DLL在我的开发机器上,然后他们编译解决方案,最后提交应用程序的dll来源控制,然后它被包含在包中,因为它被包含为另一个源项目。

所以我猜想这会成为我的错,因为不理解如何获得TFS BUILD输出到源文件夹中,并将其包含到msdeploy使用的包中。

可能存在一些非常基本的东西,我错过了或者只是略过 - 而不是理解,包创建来自Sources文件夹而不是_PublishedWebsites文件夹。我也不理解如何将MSBuild编译的应用程序dll和项目引用的dll放入我的包中 - 替换源控件中的提交的源项目。

我希望这不是完全浪费你的时间,因为我错过了某个地方的“source =”。

我很欣赏它,您可以引导我到任何现有的资源已经解释这到我应该能够得到我的头,并得到它的工作。或者如果在这里告诉我很容易。

+0

问题 - 您是否确保日志文件中的操作顺序?例如,您是否确保在部署打包之前构建Web应用程序dll?它可能是一个竞争条件? – 2012-07-31 13:49:32

+0

嗨,尼克,应用程序输出确实包含网络应用程序的DLL。我在第8行解释说 - 也许还不清楚。 – 2012-08-01 17:53:09

+0

我不确定我们在这里是否了解彼此。我读了你的问题说:“我的msdeploy软件包不包含它应该但它们看起来被内置到我的构建的输出文件夹中的DLL”我的问题是:你是否查看了MSBuild日志文件以确保缺少DLL与部署包相比,是否按照正确的顺序构建?意思是说,他们最终可能都在那里,但也许他们不在正确的时间。 – 2012-08-02 16:23:08

回答

4

这里的问题是CopyAllFilesToSingleFolderForPackage目标本身没有从VS2012目标中调用。我们做了很多改变,这可能是我们的倒​​退。我会研究这件事,看看我们能做些什么。幸运的是,它应该是非常简单的更新,以获得您正在寻找的行为。而不是使用CopyAllFilesToSingleFolderForPackageDependsOn,您应该可以使用PipelineCollectFilesPhaseDependsOn作为替代方案。你应该能够改变你有什么上面

<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> 

我只是想这两个VS2012和VS2010所以这似乎是一个更好的解决办法,则CopyAllFilesToSingleFolderForPackageDependsOn方法。你可以试试看,让我知道你发现了什么?

+0

谢谢,Sayed。它的作品,至少用VS 2012 – whyleee 2013-04-05 20:07:40

+0

你好!对于offtopicing抱歉,但正如我试图消除一些WPP标签歧义,我注意到你已经建议msdeploy-> webdeploy标签同义词。你能否为webdeploy添加'microsoft-web-deploy'synonim(反之亦然)?我自己会这样做,但我现在“缺乏必要的分数”。 – quetzalcoatl 2014-02-28 20:52:39