我有一个包含多个MVC和库项目的解决方案,这个解决方案的构建非常慢.
为了提高构建性能,我将所有项目更改为在同一文件夹中输出,并将所有项目引用更改为copy local = false,这使得构建性能几乎提高了90%,从10m到1m30s.
但是,这会产生一个问题,在运行模式下,我的应用程序显示错误,因为输出文件夹中没有引用程序集.
我想知道是否存在一种方法,使解决方案只将引用复制一次到我的输出文件夹.
我尝试了一些东西,比如将目标从packages文件夹复制到输出文件夹,但这不能正常工作,因为在一个包文件夹中可以存在来自许多框架版本的dll.
有什么想法解决这个问题吗?
解决方法
一个常见的解决方案是将所有项目输出到同一目录,并将所有引用设置为copyLocal = False,然后有一个额外的项目(或现有的项目,如主应用程序),目标是相同的输出目录,并包含所有项目引用并具有copyLocal = True.然后,这个项目有效地将所有引用都放在您想要的位置.为了让所有项目都使用相同的输出目录,我建议修改.csproj文件以导入相同的文件,该文件设置OutputPath属性,而不是在每个项目中手动更改它.
或者,由于您提到单个输出目录的主要问题而且copyLocal设置为True,因此某些文件会被多次复制,您可以修改复制的方式.通常,默认情况下,使用的复制任务将跳过具有匹配时间戳的文件.这是由SkipcopyUnchangedFiles标志控制的,因此您可以强制它为true并查看是否更改了任何内容:
msbuild my.sln /p:SkipcopyUnchangedFiles=True
或者您甚至可以要求它使用硬链接而不是复制,这实际上应该意味着根本不会制作副本:
msbuild my.sln /p:CreateHardLinksForcopyLocalIfPossible=True
或符号链接:
msbuild my.sln /p:CreateSymbolicLinksForcopyLocalIfPossible=True
如果所有其他方法都失败并且文件仍然被复制多次,则可能意味着例如一个项目引用A.dll而另一个项目也引用A.dll但是来自不同的目录或不同的版本等,所以除非你修复它,否则它将被复制两次,无论如何.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。