【问题标题】:MSBuild copy web project references without buildingMSBuild 复制 web 项目引用而不构建
【发布时间】:2012-04-23 00:19:36
【问题描述】:

我希望在解决方案配置中设置为“未构建”的解决方案中有一个 Web 项目,但是我仍然希望将项目的引用(及其依赖项)复制到该项目的 bin 文件夹中。 sln 中有实际构建的类库项目,web 项目引用了这些。

我们当前的“构建”只是调用 devenv,它正是这样做的。出于显而易见的原因,我宁愿使用 MSBuild。

正在寻找手动复制文件的方法(单独复制或 *.dll)。有很多方法可以做到这一点。我正在寻找一种方法来复制 devenv.exe 提供给我们的行为 - 根据解决方案文件中项目部分的内容(如下)自动复制引用(及其依赖项)。

这些参考来自本节中的解决方案:

Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}")="TheWebProjectName", 
                                                  "Web\Project\Folder", 
                                                  "{1CBD1906-0C2E-4C92-A81D-63C2AD816EA1}"
    ProjectSection(WebsiteProperties) = preProject
        TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
        ProjectReferences = "{B125568E-E80C-4080-B8D3-5602B604734C}|Some.Reference.dll;
                             {117E8B0A-F0D6-47D0-BB51-71099969566D}|Some.OtherRef.dll;"
        ...
    EndProjectSection
EndProject

【问题讨论】:

  • 感谢您的评论,但我不确定这就是我想要的。我需要先将 Web 项目的引用放入该项目的 bin 文件夹,然后才能将它们同步到另一个 Web 服务器。

标签: c# asp.net msbuild


【解决方案1】:

MSBuild 使用目标文件来确定其构建步骤。查看相关目标文件并确定 MSBuild 如何复制这些文件、创建您自己的目标文件并修改构建配置以使用新目标。

相关目标文件:

  • 位置:C:\Windows\Microsoft.NET\Framework\v$(版本)
  • Microsoft.CSharp.targets
  • Microsoft.Common.targets

相关文档:

【讨论】:

  • 好的,谢谢,我去看看。你得到了赏金(尽管我不确定这是否真的能解决它,但你是唯一一个似乎读过这个问题的人)
【解决方案2】:

您可以使用 MSBuild Tasks 执行诸如此类的构建操作:http://msdn.microsoft.com/en-us/library/ms171466(v=vs.80).aspx

在您的具体情况下,您可能会对内置的复制任务感兴趣:http://msdn.microsoft.com/en-us/library/3e54c37h(v=vs.80).aspx

【讨论】:

  • 如果我这样做,我必须指定我想要复制的每个文件。我们有大约 50 个类库和大约 10 个 Web 项目。此外,每次在 Web 项目中更改时,我们的 msbuild 项目中的引用都需要更新。我想要调用 devenv 给我的相同功能。 (如果我只想做文件副本,有超过 9000 种方法可以做到)
  • 我想很公平,尽管您的原始问题仅提到从“解决方案中的 Web 项目”复制参考文献未提及 50 个类库和 10 个 Web 项目,并且您不是在寻找文件副本操作。您显然在我回答后编辑了您的初始问题。在发布问题之前明确您的意图,您将有更好的机会获得所需的答案。
  • 我认为人们不会去 SO 询问有关“如何将文件 A 复制到位置 B”的问题。
  • sigh...你想错了,SO 不是为精英人士保留的,所有知识和技能水平的人都访问这个很棒的网站来学习和分享他们所知道的
【解决方案3】:

尝试使用 powershell 而不是 msbuild! Ria 服务还强烈依赖于 powershell commandlet。

干杯..

【讨论】:

  • 您的评论在解决此问题方面没有多大作用,而没有指定要使用 powershell 中的哪个命令。请更具体。
【解决方案4】:

使用 Exec 任务调用 devenv.exe - 我们一直为 BizTalk 解决方案这样做,因为旧版本的 MSBuild 不支持 BizTalk 项目文件...

【讨论】:

  • 这并没有让我更进一步。所要做的就是将 devenv 包装在 msbuild 中,什么都不做。
  • 也许我不明白你的问题 - 但如果你想要 devenv 提供的确切功能,包装 devenv 怎么会一事无成?
  • 我想要 devenv 提供的功能,而不使用 devenv。我想用 MSBuild 完成同样的事情。
  • 我想使用 MSBuild 有几个原因 - 它更快,它允许更多的自定义(自定义目标等),并允许多处理器。使用 MSBuild 构建我们的解决方案所需的时间大约是使用 devenv 的 1/20(30 秒对 6 分钟) - 唯一缺少的是这些 Web 项目引用没有被复制。
猜你喜欢
  • 1970-01-01
  • 2020-01-02
  • 2013-12-22
  • 2019-09-28
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多