本文整理汇总了C#中Microsoft.CodeAnalysis.CSharp.CSharpCompilation.RemoveSyntaxTrees方法的典型用法代码示例。如果您正苦于以下问题:C# CSharpCompilation.RemoveSyntaxTrees方法的具体用法?C# CSharpCompilation.RemoveSyntaxTrees怎么用?C# CSharpCompilation.RemoveSyntaxTrees使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.CodeAnalysis.CSharp.CSharpCompilation
的用法示例。
在下文中一共展示了CSharpCompilation.RemoveSyntaxTrees方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BuildIncremental
private CompileResult BuildIncremental(CompileOptions options)
{
var result = new CompileResult();
_logger.Info("BuildIncremental");
_options = options;
// update reference files
var referenceChanges = _referenceFileList.Update(options.References);
foreach (var file in referenceChanges.Added)
{
_logger.Info("+ {0}", file);
var reference = CreateReference(file);
_compilation = _compilation.AddReferences(reference);
_referenceMap.Add(file, reference);
}
foreach (var file in referenceChanges.Changed)
{
_logger.Info("* {0}", file);
var reference = CreateReference(file);
_compilation = _compilation.RemoveReferences(_referenceMap[file])
.AddReferences(reference);
_referenceMap[file] = reference;
}
foreach (var file in referenceChanges.Removed)
{
_logger.Info("- {0}", file);
_compilation = _compilation.RemoveReferences(_referenceMap[file]);
_referenceMap.Remove(file);
}
// update source files
var sourceChanges = _sourceFileList.Update(options.Files);
var parseOption = new CSharpParseOptions(LanguageVersion.CSharp6, DocumentationMode.Parse, SourceCodeKind.Regular, options.Defines);
foreach (var file in sourceChanges.Added)
{
_logger.Info("+ {0}", file);
var syntaxTree = ParseSource(file, parseOption);
_compilation = _compilation.AddSyntaxTrees(syntaxTree);
_sourceMap.Add(file, syntaxTree);
}
foreach (var file in sourceChanges.Changed)
{
_logger.Info("* {0}", file);
var syntaxTree = ParseSource(file, parseOption);
_compilation = _compilation.RemoveSyntaxTrees(_sourceMap[file])
.AddSyntaxTrees(syntaxTree);
_sourceMap[file] = syntaxTree;
}
foreach (var file in sourceChanges.Removed)
{
_logger.Info("- {0}", file);
_compilation = _compilation.RemoveSyntaxTrees(_sourceMap[file]);
_sourceMap.Remove(file);
}
// emit or reuse prebuilt output
var reusePrebuilt = _outputDllStream != null && (
(_options.PrebuiltOutputReuse == PrebuiltOutputReuseType.WhenNoChange &&
sourceChanges.Empty && referenceChanges.Empty) ||
(_options.PrebuiltOutputReuse == PrebuiltOutputReuseType.WhenNoSourceChange &&
sourceChanges.Empty && referenceChanges.Added.Count == 0 && referenceChanges.Removed.Count == 0));
if (reusePrebuilt)
{
_logger.Info("Reuse prebuilt output");
// write dll
var dllFile = Path.Combine(_options.WorkDirectory, _options.Output);
using (var dllStream = new FileStream(dllFile, FileMode.Create))
{
_outputDllStream.Seek(0L, SeekOrigin.Begin);
_outputDllStream.CopyTo(dllStream);
}
// write pdb or mdb
switch (_options.DebugSymbolFile)
{
case DebugSymbolFileType.Pdb:
var pdbFile = Path.Combine(_options.WorkDirectory, Path.ChangeExtension(_options.Output, ".pdb"));
using (var debugSymbolStream = new FileStream(pdbFile, FileMode.Create))
{
_outputDebugSymbolStream.Seek(0L, SeekOrigin.Begin);
_outputDebugSymbolStream.CopyTo(debugSymbolStream);
}
break;
case DebugSymbolFileType.PdbToMdb:
case DebugSymbolFileType.Mdb:
var mdbFile = Path.Combine(_options.WorkDirectory, _options.Output + ".mdb");
using (var debugSymbolStream = new FileStream(mdbFile, FileMode.Create))
{
_outputDebugSymbolStream.Seek(0L, SeekOrigin.Begin);
_outputDebugSymbolStream.CopyTo(debugSymbolStream);
}
//.........这里部分代码省略.........