Ren*_*ite 5 c# asp.net msbuild asp.net-mvc build
我有一个包含多个 MVC 和库项目的解决方案,并且该解决方案的构建非常慢。
为了提高构建性能,我将所有项目更改为在同一文件夹中输出,并将所有项目引用更改为 copy local = false,这将构建性能提高了几乎 90%,从 10m 到 1m30s。
但是,这产生了一个问题,在运行模式下,我的应用程序显示错误,因为输出文件夹中没有引用程序集。
我想知道是否存在一种方法,使解决方案仅将引用复制到我的输出文件夹中一次。
我尝试了一些方法,例如将 dll 从包文件夹复制到输出文件夹的目标,但这不能正常工作,因为在包文件夹中可以存在来自许多框架版本的 dll。
有什么想法可以解决这个问题吗?
一种常见的解决方案是将所有项目输出到同一目录,并将所有引用设置为 CopyLocal=False,然后有一个额外的项目(或现有项目,如主应用程序)针对同一输出目录并包含所有项目引用并具有 CopyLocal=True。然后,该项目就可以有效地将您的所有参考文献放到您想要的位置。为了让所有项目使用相同的输出目录,我建议修改 .csproj 文件以全部导入设置 OutputPath 属性的相同文件,而不是在每个项目中手动更改它。
或者,由于您提到单个输出目录和 CopyLocal 设置为 True 的主要问题是某些文件被复制多次,因此您可以修改复制的方式。通常,默认情况下,使用的复制任务将跳过具有匹配时间戳的文件。这是由 SkipCopyUnchangedFiles 标志控制的,因此您可以将其强制为 true 并查看是否会更改任何内容:
msbuild my.sln /p:SkipCopyUnchangedFiles=True
Run Code Online (Sandbox Code Playgroud)
或者您甚至可以要求它使用硬链接而不是复制,这实际上意味着根本不进行任何复制:
msbuild my.sln /p:CreateHardLinksForCopyLocalIfPossible=True
Run Code Online (Sandbox Code Playgroud)
或符号链接:
msbuild my.sln /p:CreateSymbolicLinksForCopyLocalIfPossible=True
Run Code Online (Sandbox Code Playgroud)
如果所有其他方法都失败并且文件仍然被复制多次,则可能意味着例如一个项目引用了 A.dll,而另一个项目也引用了 A.dll,但来自不同的目录或不同的版本等,因此无论如何它都会被复制两次除非你解决这个问题怎么办?
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |