VS 2008专业版,智能设备.NET C#项目 - 构建速度慢

12

我有一份使用Smart Device .NET C#的项目,使用VS 2008 Professional进行开发。项目中共有约100个cs文件。每次编译该项目时链接器需要大约1分钟的时间,从而导致编译时间很长。我的电脑配备了Core i3处理器、4GB RAM和7200rpm硬盘。

这种情况是什么原因引起的,我该如何优化编译过程?是否有任何Visual Studio选项可供使用?


2
C# 不使用链接器。将 MSBuild 输出更改为诊断,并将您看到的时间粘贴到您的问题中。工具 + 选项,项目和解决方案,生成和运行。 - Hans Passant
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
21
如果你遵循Hans Passant评论中的建议,并将MSBuild设置为诊断输出,它将更清晰地展示花费时间的情况。如果您发现构建挂在了许可编译器(LC.exe)上,那么这可能是由于它试图调用服务器并超时造成的。您可以通过修改machine.config文件来解决此问题:编辑c:\windows\microsoft.net\framework\v2.0.50727\config\machine.config,并添加以下密钥:
  <configuration>
    <runtime>
      <generatePublisherEvidence enabled="false"/>

编辑:根据下面的评论,我进行了一些调查。平台验证任务在VS2008中运行非常缓慢,这是一个已知的问题。有关此问题的更多详细信息可以在此处找到:

http://blogs.msdn.com/b/vsdteam/archive/2006/09/15/756400.aspx

解决此问题的一种方法是在构建中禁用该任务。要做到这一点:

1) 打开文件:

%windir%\Microsoft.NET\Framework\v2.0.50727\Microsoft.CompactFramework.Common.Targets

进行编辑。

2) 转到这一行:

Name="PlatformVerificationTask">

并将其更改为:

Name="PlatformVerificationTask" Condition="'$(SkipPlatformVerification)' != 'true'">

3) 将SkipPlatformVerification环境变量添加到系统中,并将其设置为“true”(要重新启用平台验证,请将环境变量设置为“false”)。如果您需要关于设置环境变量的帮助,请阅读http://vlaurie.com/computers2/Articles/environment.htm。如果您不想添加环境变量,可以将条件替换为始终为false的内容(即Condition="'true' == 'false'")


我检查了诊断级别。在我的情况下,PlatformVerificationTask花费了290174毫秒。这是什么原因? - cubesoft
我在3.5文件夹中找到了Microsoft.CompactFramework.Common.Targets文件,而不是2.0文件夹。 %windir%\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.Common.targets - fefferoni
1
如果您不想处理环境变量,请将 <Target Name="PlatformVerificationTask"> 更改为 **<Target Name="PlatformVerificationTask" Condition="0==1">**。 - Jaroslav Svestka

6
只需在.csproj文件中重新定义一个目标,就像这样。然后它将在整个机器上运行,或者您可以将整个带有条件行的代码块复制。 无论哪种方式,您都不需要修改系统文件。
<Target Name="PlatformVerificationTask"></Target>

这是一个很棒的答案。Microsoft.CompactFramework.Common.Targets 上的编辑将被 Windows 更新覆盖。这样会在不同的计算机上运行。 - mh__

1

针对Windows 10和框架3.5,

在C:\Windows\Microsoft.NET\Framework\v3.5文件夹中,找到Microsoft.CompactFramework.common.targets文件。

在这个部分中

<Target
    Name="PlatformVerificationTask">
    <PlatformVerificationTask
        PlatformFamilyName="$(PlatformFamilyName)"
        PlatformID="$(PlatformID)"
        SourceAssembly="@(IntermediateAssembly)"
        ReferencePath="@(ReferencePath)"
        TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
        PlatformVersion="$(TargetFrameworkVersion)"/>
</Target>

更改此处,(添加 Condition="'$(DoPlatformVerificationTask)'=='true'" 行)

<Target
    Name="PlatformVerificationTask">
    <PlatformVerificationTask
        Condition="'$(DoPlatformVerificationTask)'=='true'" <!-- Added -->
        PlatformFamilyName="$(PlatformFamilyName)"
        PlatformID="$(PlatformID)"
        SourceAssembly="@(IntermediateAssembly)"
        ReferencePath="@(ReferencePath)"
        TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
        PlatformVersion="$(TargetFrameworkVersion)"/>
</Target> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,