Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
ff4d8852
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,发现更多精彩内容 >>
提交
ff4d8852
编写于
9月 06, 2017
作者:
J
Jason Malinowski
提交者:
GitHub
9月 06, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #21928 from jasonmalinowski/dont-write-compilerpackage-files-if-not-needed
Don't write files in CompilerPackage if not needed
上级
50569d39
abe47f7e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
38 deletion
+51
-38
src/Compilers/Extension/CompilerPackage.cs
src/Compilers/Extension/CompilerPackage.cs
+51
-38
未找到文件。
src/Compilers/Extension/CompilerPackage.cs
浏览文件 @
ff4d8852
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using
System
;
using
Microsoft.VisualStudio.Shell.Interop
;
using
Microsoft.VisualStudio.Shell
;
using
System.Reflection
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Reflection
;
using
EnvDTE
;
using
Microsoft.VisualStudio.Shell
;
using
Microsoft.VisualStudio.Shell.Interop
;
namespace
Roslyn.Compilers.Extension
{
...
...
@@ -47,23 +48,13 @@ protected override void Initialize()
private
void
WriteMSBuildFiles
(
string
packagePath
,
string
hiveName
)
{
// First we want to ensure any existing Roslyn files are deleted so we don't have old stuff floating
// aroud and causing troubles
var
msbuildDirectory
=
new
DirectoryInfo
(
GetMSBuildPath
());
if
(
msbuildDirectory
.
Exists
)
{
foreach
(
var
file
in
msbuildDirectory
.
EnumerateFiles
(
$"*Roslyn*
{
hiveName
}
*"
,
SearchOption
.
AllDirectories
))
{
file
.
Delete
();
}
}
// A map of the file name to the content we need to ensure exists in the file
var
filesToWrite
=
new
Dictionary
<
string
,
string
>(
StringComparer
.
OrdinalIgnoreCase
);
try
{
// The props we want to be included as early as possible since we want our tasks to be used and
// to ensure our setting of targets path happens early enough
var
propsContent
=
$@"<?xml version=""1.0"" encoding=""utf-8""?>
// The props we want to be included as early as possible since we want our tasks to be used and
// to ensure our setting of targets path happens early enough
filesToWrite
.
Add
(
GetMSBuildRelativePath
(
$@"Imports\Microsoft.Common.props\ImportBefore\Roslyn.Compilers.Extension.
{
hiveName
}
.props"
),
$@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
<PropertyGroup Condition=""'$(RoslynHive)' == '
{
hiveName
}
'"">
<CSharpCoreTargetsPath>
{
packagePath
}
\Microsoft.CSharp.Core.targets</CSharpCoreTargetsPath>
...
...
@@ -72,12 +63,10 @@ private void WriteMSBuildFiles(string packagePath, string hiveName)
<UsingTask TaskName=""Microsoft.CodeAnalysis.BuildTasks.Csc"" AssemblyFile=""
{
packagePath
}
\Microsoft.Build.Tasks.CodeAnalysis.dll"" Condition=""'$(RoslynHive)' == '
{
hiveName
}
'"" />
<UsingTask TaskName=""Microsoft.CodeAnalysis.BuildTasks.Vbc"" AssemblyFile=""
{
packagePath
}
\Microsoft.Build.Tasks.CodeAnalysis.dll"" Condition=""'$(RoslynHive)' == '
{
hiveName
}
'"" />
</Project>"
;
</Project>"
)
;
WriteMSBuildFile
(
propsContent
,
$@"Imports\Microsoft.Common.props\ImportBefore\Roslyn.Compilers.Extension.
{
hiveName
}
.props"
);
// This targets content we want to be included later since the project flie might touch UseSharedCompilation
var
targetsContent
=
// This targets content we want to be included later since the project file might touch UseSharedCompilation
var
targetsContent
=
$@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
<!-- If we're not using the compiler server, set ToolPath/Exe to direct to the exes in this package -->
...
...
@@ -90,8 +79,38 @@ private void WriteMSBuildFiles(string packagePath, string hiveName)
</PropertyGroup>
</Project>"
;
WriteMSBuildFile
(
targetsContent
,
$@"Microsoft.CSharp.targets\ImportBefore\Roslyn.Compilers.Extension.
{
hiveName
}
.targets"
);
WriteMSBuildFile
(
targetsContent
,
$@"Microsoft.VisualBasic.targets\ImportBefore\Roslyn.Compilers.Extension.
{
hiveName
}
.targets"
);
filesToWrite
.
Add
(
GetMSBuildRelativePath
(
$@"Microsoft.CSharp.targets\ImportBefore\Roslyn.Compilers.Extension.
{
hiveName
}
.targets"
),
targetsContent
);
filesToWrite
.
Add
(
GetMSBuildRelativePath
(
$@"Microsoft.VisualBasic.targets\ImportBefore\Roslyn.Compilers.Extension.
{
hiveName
}
.targets"
),
targetsContent
);
// First we want to ensure any Roslyn files with our hive name that we aren't writing -- this is probably
// leftovers from older extensions
var
msbuildDirectory
=
new
DirectoryInfo
(
GetMSBuildPath
());
if
(
msbuildDirectory
.
Exists
)
{
foreach
(
var
file
in
msbuildDirectory
.
EnumerateFiles
(
$"*Roslyn*
{
hiveName
}
*"
,
SearchOption
.
AllDirectories
))
{
if
(!
filesToWrite
.
ContainsKey
(
file
.
FullName
))
{
file
.
Delete
();
}
}
}
try
{
foreach
(
var
fileAndContents
in
filesToWrite
)
{
var
parentDirectory
=
new
DirectoryInfo
(
Path
.
GetDirectoryName
(
fileAndContents
.
Key
));
parentDirectory
.
Create
();
// If we already know the file has the same contents, then we can skip
if
(
File
.
Exists
(
fileAndContents
.
Key
)
&&
File
.
ReadAllText
(
fileAndContents
.
Key
)
==
fileAndContents
.
Value
)
{
continue
;
}
File
.
WriteAllText
(
fileAndContents
.
Key
,
fileAndContents
.
Value
);
}
}
catch
(
Exception
e
)
{
...
...
@@ -110,6 +129,7 @@ private void WriteMSBuildFiles(string packagePath, string hiveName)
}
}
private
string
GetMSBuildVersionString
()
{
var
dte
=
(
DTE
)
GetService
(
typeof
(
SDTE
));
...
...
@@ -135,23 +155,16 @@ private static Exception GetBadVisualStudioVersionException(string version)
return
new
Exception
(
$"Unrecoginzed Visual Studio Version:
{
version
}
"
);
}
private
void
WriteMSBuildFile
(
string
content
,
string
relativeFilePath
)
{
var
fileFullPath
=
Path
.
Combine
(
GetMSBuildPath
(),
relativeFilePath
);
var
directory
=
new
DirectoryInfo
(
Path
.
GetDirectoryName
(
fileFullPath
));
if
(!
directory
.
Exists
)
{
directory
.
Create
();
}
File
.
WriteAllText
(
fileFullPath
,
content
);
}
private
string
GetMSBuildPath
()
{
var
version
=
GetMSBuildVersionString
();
var
localAppData
=
Environment
.
GetFolderPath
(
Environment
.
SpecialFolder
.
LocalApplicationData
);
return
Path
.
Combine
(
localAppData
,
$@"Microsoft\MSBuild\
{
version
}
"
);
}
private
string
GetMSBuildRelativePath
(
string
relativePath
)
{
return
Path
.
Combine
(
GetMSBuildPath
(),
relativePath
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录