将项目从Visual Studio 2005迁移到2012 - System.参数nullexception,多个错误
Moving project from Visual Studio 2005 to 2012 - System.ArgumentNullException, multiple errors
我目前正试图将现有项目从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文件。这是我能想到的一种选择,另一种是关闭代码分析。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 将项目从Visual Studio 2005迁移到2012 - System.参数nullexception,多个错误