将项目从Visual Studio 2005迁移到2012 - System.参数nullexception,多个错误

Moving project from Visual Studio 2005 to 2012 - System.ArgumentNullException, multiple errors

本文关键字:nullexception 参数 System 错误 2012 Visual 项目 Studio 2005 迁移      更新时间:2023-10-16

我目前正试图将现有项目从VS 2005移动到VS 2012。该项目是用c#编写的,其中包含一些更老的c++代码,这些代码被用作一些特定科学计算的核心。这些部分通过c++中的包装层连接起来。

我在VS 2012中打开了现有的主项目,让它导入旧的项目文件。然后我尝试逐一编译每个项目。我替换了一些旧的库(例如boost),现在卡住了。

我得到这个错误,我无法解决,因为VS不会告诉我在哪一行错误发生。我尝试了Resharper,但它似乎没有在这个特定的项目中发现错误(尽管我第一次使用Resharper,它在其他项目中发现了数百个错误和警告)。

1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018: The "NativeCodeAnalysis" task failed unexpectedly.
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018: Microsoft.VisualStudio.CodeAnalysis.AnalysisResults.AnalysisResultException:       CA0001 : An unknown error occurred while running Code Analysis. ---> System.ArgumentNullException: Value cannot be null.
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018: Parameter name: path2
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018:    at System.IO.Path.Combine(String path1, String path2)
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018:    at Microsoft.Build.Tasks.TaskCommon.GetRuleSetFullPath(String ruleSet, String projectDirectory, String[] ruleSetDirectories)
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018:    at Microsoft.Build.Tasks.NativeCodeAnalysis.Execute()
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018:    --- End of inner exception stack trace ---
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018:    at Microsoft.Build.Tasks.NativeCodeAnalysis.Execute()
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
    1>C:Program Files (x86)MSBuildMicrosoftVisualStudiov11.0CodeAnalysisMicrosoft.CodeAnalysis.targets(342,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext()

I spent hours trying to find a solution to my problem. So if my question is badly asked - please try to help nonetheless and tell me what information is needed.

这是项目的。pcp文件的代码:

namespace Trace 
{
  CTraceWrapper::CTraceWrapper(const char *LibName) : CBaseWrapper(LibName), m_GetTraceTextProc(NULL)
  {
    if (m_hModInstance != NULL)
    {
      m_GetTraceTextProc = (tGetTraceText)GetProcAddress(m_hModInstance, "getTraceText");
    }
  }
  int CTraceWrapper::getTraceText(t_TraceTextMap& traceTextMap, bool bDelete)
  {
#ifdef _TRACE_ACTIVE
    if (m_GetTraceTextProc == NULL)
    {
      return RESULT_ERR_INVALID_FUNCTION_HANDLE;
    }
    m_GetTraceTextProc(traceTextMap, bDelete);
#endif
    return RESULT_OK;
  }
  CTraceWrapper Wrapper("trace.dll");
  int TraceWrapper::GetTraceList(array<TraceData^> ^%traceMap, bool bDelete)
  {
    t_TraceTextMap traceTextMap;
    int nRet = Wrapper.getTraceText(traceTextMap, bDelete);
    if (nRet != 0)
    {
      return nRet;
    }
    TraceData^ Data;
    String^ Tmp;
    array<String^> ^Split;
    int Length = 0;
    if (nRet == RESULT_OK)
    {
      traceMap = gcnew array<TraceData^>(traceTextMap.size());
      int i = 0;
      for (t_TraceTextMap::const_iterator cit = traceTextMap.begin(); cit != traceTextMap.end(); cit++)
      {
        Data = gcnew TraceData();
        Data->Time = cit->first;
        Tmp = gcnew String(cit->second.chars());
        Split = Tmp->Trim()->Split('|');
        Data->Type = Convert::ToInt16(Split[0], CultureInfo::CurrentCulture);
        Data->Module = Convert::ToInt16(Split[1], CultureInfo::CurrentCulture);
        Data->ProcessId = Convert::ToInt32(Split[2], CultureInfo::CurrentCulture);
        Data->ThreadId = Convert::ToInt32(Split[3], CultureInfo::CurrentCulture);
        Length = Split->GetLength(0);
        Data->FunctionName = ((Length > 5) ? Split[5] : String::Empty);
        Data->FileName = ((Length > 4) ? Split[4] : String::Empty);
        Data->Line = ((Length > 6) ? Convert::ToInt32(Split[6], CultureInfo::CurrentCulture) : 0);
        Data->Text = ((Length > 7) ? Split[7] : String::Empty);
        if ((Data->Type == TRACE_TYPE_TIMING_END) && (Length > 8))
        {
          Data->Interval = Convert::ToDouble(Split[8], CultureInfo::InvariantCulture);
        }
        traceMap[i++] = Data;
      }
    }
    return RESULT_OK;
  }
}

尝试打开失败的项目的csproj文件并检查它。在VS2015中,csproj文件是msbuild文件。这是我能想到的一种选择,另一种是关闭代码分析。