Tag: 编译

无法在Roslyn的新nuget中获取方法SyntaxTree.ParseFile?

我已经使用Install-Package Microsoft.CodeAnalysis -Pre安装了针对Roslyn nuget.CodeAnalysis -Pre但我仍然无法获取方法SyntaxTree.ParseFile因为我想在.cs文件中传递代码 任何关于为什么会这样的线索? 我怎么能在这里传递文件?

可以使用Roslyn生成类似于DynamicMethod IL生成的动态方法

我一直在使用DynamiMethod来生成IL method.GetILGenerator(); 这很好用,但当然很难使用,因为你通常不想在C#这样的高级语言中使用低级别的IL。 现在,因为有罗斯林,我可以使用它。 我试图找出如何使用Roslyn做类似的事情:生成一个动态方法,然后为它创建一个委托。 我能做到的唯一方法是拥有这样的全class SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@” using System; namespace RoslynCompileSample { public class Writer { public void Write(string message) { Console.WriteLine(message); } } }”); 然后我可以使用字符串连接插入我的方法而不是Write方法。 之后,在内存中生成动态程序集并加载,并使用reflection来获取所需的方法并生成委托。 这种方法似乎工作正常但对我的情况似乎有点过分,因为我需要使用多个独立的方法,导致大量的程序集被加载。 所以问题是:是否有一种简单的方法可以为Roslyn执行类似于动态方法的操作,这样我只能定义附加到类型的方法体? 如果没有,编译许多动态程序集有什么大的缺点(比如太多无法加载等等)

在编译时查看输出窗口上的所有命令行

我想在输出窗口上构建/释放时查看所有命令。 当我构建我的应用程序时,我只看到这个: —— Build started: Project: CemKutuphane, Configuration: Debug Any CPU —— CemKutuphane -> D:\Projects\Test\CemKutuphane\CemKutuphane\bin\Debug\CemKutuphane.dll ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== 这些行中没有csc.exe args。 但是visual studio ide正在为此而努力。 有没有办法看到所有命令?

.NET属性生成“必须声明一个正文,因为它没有标记为抽象或外部”编译错误

我有一个.NET 3.5(目标框架)Web应用程序。 我有一些看起来像这样的代码: public string LogPath { get; private set; } public string ErrorMsg { get; private set; } 它给了我这些行的编译错误: “must declare a body because it is not marked abstract or extern.” 有任何想法吗? 我的理解是这种样式的属性在.NET 3.0中是有效的。 谢谢! 问题原来是我的.sln文件本身。 虽然我在构建选项中更改了目标版本,但在.sln文件中,我发现了这个: TargetFramework = “3.0” 将其更改为“3.5”解决了它。 多谢你们!

dotnet dll反编译并更改代码

我需要更改.NET DLL的代码。 我可以通过使用.NETreflection器编译DLL来查看代码,但是我无法更改DLL的代码。 使用.NET Reflector,我将代码反编译并保存到我的硬盘中,但是当我能够重新编译代码时,它会给出错误。 很少有代码以二进制格式反编译,很少有代码用c#反编译。 是否有任何工具可以更改和重新编译DLL? 以下是我用来尝试反编译DLL的工具: ILSpy DisSharp Reflector7.1带有Reflexil插件 Spices.Net.Suite.5.8 部署.NET 1.0.0 devextras.codereflect dotPeek-1.0.0.2545 intellilock JustDecompile_BETA_2011.1.728.1 不幸的是,没有一个工具能够提供完美的源代码来重新编译DLL代码。

在VS2012中读取任何WPF项目的资源文件时出错

每当我尝试在VS2012中编译任何WPF项目时,我都有以下编译错误: 读取资源文件’c:\ Users \ mysuerID \ Documents \ Visual Studio 2012 \ Projects \ MyAppNAme \ MyAppNAme \ obj \ Debug \’时出错 – ‘系统找不到指定的路径。 ‘C:\ Users \ mysuerID \ Documents \ Visual Studio 2012 \ Projects \ MyAppNAme \ MyAppNAme \ CSC MyAppNAme 问题是当VS生成CSC命令时,它包含一个额外的部分重复/资源参数,如下所示: /resource:obj\Debug\ /resource:obj\Debug\MyAppName.Properties.Resources.resources CSC仅查看第一个参数,因为没有指定文件名,所以它会抛出错误。 我进入命令行模式并使用和不使用额外参数进行测试并validation它是问题所在。 我不想手动编译我的项目! 任何人都知道VS如何提出这些参数以及如何摆脱这个额外的无效参数? 构建输出看起来像这样(框架4.5) 1>Target “MainResourcesGeneration” in file […]

C#被认为是无上下文的语言吗?

我一直在寻找这个,但在MSDN论坛上对这个问题有很多不同的答案。 有人说“所有计算机语言语法都是无上下文的”,而另一些人则认为任何具有空格敏感语法的语言都可能是上下文敏感的,因此不具备上下文 (F#和Python)。 应该是一个明确的答案 ,也许是一些证据。

在运行时编译C#数组并在代码中使用它?

我知道C#代码可以在运行时使用C#编译 。 但是,因为我几分钟前刚读过这篇文章,所以我非常不满意。 我通过例子学到了很多东西。 所以告诉我。 如果我想编译类似的东西: // MapScript.CS String[] LevelMap = { “WWWWWWWWWWWWWWWWWWW”, “WGGGGGGGGGGGGGGGGGW”, “WGGGGGGGGGGGGGGGGGW”, “WWWWWWWWWWWWWWWWWWW” }; 并在我的代码中使用此数组,我该怎么做呢? 在伪代码中我想做这样的事情: Open(“MapScript.CS”); String[] levelMap = CompileArray(“levelMap”); // use the array

c#编译的应用程序可以在没有安装.net的机器上运行吗?

我想为windows开发一个小实用程序,我更喜欢在c#中这样做,因为它更容易(我是一个java开发人员)。 该实用程序可供许多人下载,我假设其中一些不会安装.net框架(这个假设是正确的,比如我的目标是win xp及以上?) 我的问题是:ac#应用程序是否可以以不需要安装.net框架的方式编译?

BuildManager解析页面inheritance

我编写了一个VirtualPathProvider来改变aspx页面加载到ASP.Net应用程序的方式。 作为此过程的一部分,我删除了Code-Behind文件,我只是确定我的页面inheritance自特定的页面类。 例如: 如果我这样做,我会得到以下exception: HttpParseException无法加载类型’Namespace.PageClass’ 我也尝试过以下方法: 这会产生以下错误: HttpParseException无法加载程序集“AssemblyName”。 确保在访问页面之前编译它。 当应用程序启动时,我将所需的Assembly加载到当前的App域中: AppDomain.Current.Load(…) 目前我假设问题在于BuildManager能够解析命名空间/程序集参考….但如果诚实……这是一个猜测:-) 有人能够对此有所了解吗?