小编use*_*893的帖子

Roslyn CSharpSyntaxTree.ParseText添加引用System.Runtime

我已经从Roslyn Pluralsight教程中复制了这段代码.

string code = "class Foo { }";

var tree = CSharpSyntaxTree.ParseText(code);
var node = tree.GetRoot();

Console.WriteLine(node.ToString());

var ret = SyntaxFactory.ClassDeclaration("Foo").
    WithMembers(SyntaxFactory.List<MemberDeclarationSyntax>(new[] {
        SyntaxFactory.MethodDeclaration(SyntaxFactory.
        PredefinedType(SyntaxFactory.Token(SyntaxKind.VoidKeyword)),
        "Bar"
        ).WithBody(SyntaxFactory.Block()
        )
})).NormalizeWhitespace();

Console.WriteLine(ret.ToString());`
Run Code Online (Sandbox Code Playgroud)

在调试模式下,我看到变量"node"和"ret"默默地抛出此错误:

"类型'对象'是在未引用的程序集中定义的.您必须添加对程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"的引用.

在Roslyn Plurarsight视频教程"使用API​​创建语法树"中没有问题.

如何附加对CSharpSyntaxTree类的引用.

编辑:
我正在使用Visual Studio 2015 Preview.

我的Visual Studio 2015预览中出错

在Pluralsight视频中,这个简单的代码没有错误

Pluralsight视频

编辑:

问题仅出在Visual Studio工具提示中.我可以毫无问题地使用Syntax Tree API.例如,此代码在没有任何奇怪异常的情况下编写节点和标记,但Visual Studio在调试代码时不会在工具提示中显示语法树.

static void PrintSyntaxTree(SyntaxNode node)
{
    if (node != null)
    {
        foreach (var item in node.ChildTokens())
        {
            Console.Write(item);
        }
        Console.WriteLine("");
        foreach (SyntaxNode child in node.ChildNodes())
            PrintSyntaxTree(child);
    } …
Run Code Online (Sandbox Code Playgroud)

c# roslyn visual-studio-2015

7
推荐指数
0
解决办法
1798
查看次数

Roslyn AddDocument到项目并将此更改保存到实际解决方案文件

这应该添加一个文档.

    public static void AddDoc()
    {
        var msBuild = MSBuildWorkspace.Create();

        var sln = msBuild.OpenSolutionAsync
            (@"D:\PanNiebieski\Documents\Visual Studio 14\Projects\WebApplication1"
            + @"\WebApplication1.sln").Result;

        foreach (var p in sln.Projects)
        {
            p.AddDocument(Guid.NewGuid().ToString() + ".txt", "test");

            var ok = msBuild.TryApplyChanges(sln);

            Console.WriteLine(p.Name + ":" + ok);
        }

        Console.ReadKey();
    }
Run Code Online (Sandbox Code Playgroud)

方法"TryApplyChanges"返回true,表示已添加文档.然后,当我检查解决方案时,没有那样存在.添加项目引用时遇到同样的问题.

问题是如何保存更改,例如将文档添加到实际项目中.我想念一些东西吗?StackOverflow中关于添加对项目的引用的许多问题都说这根本不起作用.方法"AddDocument"也什么都不做?

此方法表示支持此操作.我很迷惑.

在此输入图像描述

c# roslyn

7
推荐指数
2
解决办法
2837
查看次数

单元测试框架 - 解析实体名时发生错误

我创建了简单的MS单元测试项目.Assert.Equal(true, true).当我想运行测试时,我收到来自Resharper和Visual Studio的错误.

"单元测试Runner未能运行测试

System.Xml.XmlException:解析EnityName时发生错误.第1行,第17位."

我错过了什么吗

编辑:我无法添加屏幕截图,我无法选择要复制的文本.好的,我会尽我所能写出来的.

at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.xml.XmlTextReaderImpl.Throw(String res,String arg)
at System.Xml.XmlText.ParseEnityName()
at System.Xml.XmlTextReaderImplparseEnityReference
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextLoader.ParsePartialContent(XmlNode parentNode,String innerxmltext, xmlNodeType nt)
at System.Xml.XmlElement.set_InnerXml(string value)
at Microsoft.VisualStudio.TestPlatform.Utilities.InferSettingHelper.AppendOrModifyChild(XpathNavigator,String nodePatH,String nodeNAME,sTRING INNERxML)
at Microsoft.VisualStudio.TestPlatform.Utilities.InferSettingsHelper.UpdatedRunConfiguration(XPathNavigator, ArchitectureeffectivePlatform,FrameworkVersion effectiveFramework,String resultsDirectory,String solutionDirectory,String binariesRootDirectory)
Microsoft.VisualStudio.TestPlatform.Utilities.InferSettingsHelper.MergeRunSettingsAndFindCompatibleSource()
at JetBrains.ReSharper.UnitTestProvider.MSTest11.MsTest11Runner.Run(IRemoteTaskServer server,String assemblyLocation,String runConfigurationFilename,IUnitTestRun run)
Run Code Online (Sandbox Code Playgroud)

unit-testing vs-unit-testing-framework

2
推荐指数
1
解决办法
593
查看次数

我可以以编程方式创建C#项目吗?

例如:我可以从另一个C#应用程序创建一个"Hello World"控制台应用程序并构建它吗?

我想创建一个简单的自动化流程,在没有Visual Studio的情况下创建.NET项目并构建它们.

.net c# visual-studio

-2
推荐指数
1
解决办法
1128
查看次数