Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
6780df8e
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6780df8e
编写于
10月 17, 2018
作者:
D
Dustin Campbell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't crash in MSBuildWorkspace on malformed paths
上级
72a6857b
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
39 addition
and
26 deletion
+39
-26
src/Workspaces/Core/MSBuild/MSBuild/MSBuildProjectLoader.Worker.cs
...paces/Core/MSBuild/MSBuild/MSBuildProjectLoader.Worker.cs
+9
-3
src/Workspaces/Core/MSBuild/MSBuild/PathResolver.cs
src/Workspaces/Core/MSBuild/MSBuild/PathResolver.cs
+2
-2
src/Workspaces/Core/MSBuild/MSBuild/ProjectFile/CommandLineArgumentReader.cs
.../MSBuild/MSBuild/ProjectFile/CommandLineArgumentReader.cs
+3
-2
src/Workspaces/Core/MSBuild/MSBuild/ProjectFile/ProjectFile.cs
...orkspaces/Core/MSBuild/MSBuild/ProjectFile/ProjectFile.cs
+23
-19
src/Workspaces/MSBuildTest/MSBuildWorkspaceTests.cs
src/Workspaces/MSBuildTest/MSBuildWorkspaceTests.cs
+2
-0
未找到文件。
src/Workspaces/Core/MSBuild/MSBuild/MSBuildProjectLoader.Worker.cs
浏览文件 @
6780df8e
...
...
@@ -408,10 +408,16 @@ private IEnumerable<AnalyzerReference> ResolveAnalyzerReferences(CommandLineArgu
foreach
(
var
path
in
commandLineArgs
.
AnalyzerReferences
.
Select
(
r
=>
r
.
FilePath
))
{
var
fullPath
=
Path
.
GetFullPath
(
path
);
if
(
File
.
Exists
(
fullPath
))
string
fullPath
;
if
(
PathUtilities
.
IsAbsolute
(
path
))
{
analyzerLoader
.
AddDependencyLocation
(
fullPath
);
fullPath
=
FileUtilities
.
TryNormalizeAbsolutePath
(
path
);
if
(
fullPath
!=
null
&&
File
.
Exists
(
fullPath
))
{
analyzerLoader
.
AddDependencyLocation
(
fullPath
);
}
}
}
...
...
src/Workspaces/Core/MSBuild/MSBuild/PathResolver.cs
浏览文件 @
6780df8e
...
...
@@ -65,7 +65,7 @@ public bool TryGetAbsoluteProjectPath(string path, string baseDirectory, Diagnos
return
true
;
}
private
string
GetAbsolutePath
(
string
path
,
string
baseDirectory
)
=>
Path
.
GetFull
Path
(
FileUtilities
.
ResolveRelativePath
(
path
,
baseDirectory
)
??
path
);
private
st
atic
st
ring
GetAbsolutePath
(
string
path
,
string
baseDirectory
)
=>
FileUtilities
.
NormalizeAbsolute
Path
(
FileUtilities
.
ResolveRelativePath
(
path
,
baseDirectory
)
??
path
);
}
}
src/Workspaces/Core/MSBuild/MSBuild/ProjectFile/CommandLineArgumentReader.cs
浏览文件 @
6780df8e
...
...
@@ -118,8 +118,9 @@ protected string GetDocumentFilePath(MSB.Framework.ITaskItem documentItem)
protected
string
GetAbsolutePath
(
string
path
)
{
var
directoryPath
=
PathUtilities
.
GetDirectoryName
(
Project
.
FullPath
);
return
Path
.
GetFullPath
(
FileUtilities
.
ResolveRelativePath
(
path
,
directoryPath
)
??
path
);
var
baseDirectory
=
PathUtilities
.
GetDirectoryName
(
Project
.
FullPath
);
var
absolutePath
=
FileUtilities
.
ResolveRelativePath
(
path
,
baseDirectory
)
??
path
;
return
FileUtilities
.
TryNormalizeAbsolutePath
(
absolutePath
)
??
absolutePath
;
}
protected
void
ReadAdditionalFiles
()
...
...
src/Workspaces/Core/MSBuild/MSBuild/ProjectFile/ProjectFile.cs
浏览文件 @
6780df8e
...
...
@@ -199,7 +199,7 @@ private string GetAbsolutePathRelativeToProject(string path)
{
// TODO (tomat): should we report an error when drive-relative path (e.g. "C:goo.cs") is encountered?
var
absolutePath
=
FileUtilities
.
ResolveRelativePath
(
path
,
_projectDirectory
)
??
path
;
return
Path
.
GetFullPath
(
absolutePath
)
;
return
FileUtilities
.
TryNormalizeAbsolutePath
(
absolutePath
)
??
absolutePath
;
}
private
string
GetDocumentFilePath
(
MSB
.
Framework
.
ITaskItem
documentItem
)
...
...
@@ -234,27 +234,31 @@ protected static string GetDocumentLogicalPath(MSB.Framework.ITaskItem documentI
}
else
{
var
result
=
documentItem
.
ItemSpec
;
if
(
Path
.
IsPathRooted
(
result
))
var
filePath
=
documentItem
.
ItemSpec
;
if
(!
PathUtilities
.
IsAbsolute
(
filePath
))
{
// If we have an absolute path, there are two possibilities:
result
=
Path
.
GetFullPath
(
result
);
// If the document is within the current project directory (or subdirectory), then the logical path is the relative path
// from the project's directory.
if
(
result
.
StartsWith
(
projectDirectory
,
StringComparison
.
OrdinalIgnoreCase
))
{
result
=
result
.
Substring
(
projectDirectory
.
Length
);
}
else
{
// if the document lies outside the project's directory (or subdirectory) then place it logically at the root of the project.
// if more than one document ends up with the same logical name then so be it (the workspace will survive.)
return
Path
.
GetFileName
(
result
);
}
return
filePath
;
}
return
result
;
var
normalizedPath
=
FileUtilities
.
TryNormalizeAbsolutePath
(
filePath
);
if
(
normalizedPath
==
null
)
{
return
filePath
;
}
// If the document is within the current project directory (or subdirectory), then the logical path is the relative path
// from the project's directory.
if
(
normalizedPath
.
StartsWith
(
projectDirectory
,
StringComparison
.
OrdinalIgnoreCase
))
{
return
normalizedPath
.
Substring
(
projectDirectory
.
Length
);
}
else
{
// if the document lies outside the project's directory (or subdirectory) then place it logically at the root of the project.
// if more than one document ends up with the same logical name then so be it (the workspace will survive.)
return
PathUtilities
.
GetFileName
(
normalizedPath
);
}
}
}
...
...
src/Workspaces/MSBuildTest/MSBuildWorkspaceTests.cs
浏览文件 @
6780df8e
...
...
@@ -3597,6 +3597,8 @@ public async Task TestOpenProjectAsync_MalformedAdditionalFilePath()
// Project should open without an exception being thrown.
Assert
.
NotNull
(
project
);
Assert
.
Contains
(
project
.
AdditionalDocuments
,
doc
=>
doc
.
Name
==
"TEST::"
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录