标签: csc

是否可以使用.net核心Roslyn编译器编译单个C#代码文件?

在旧的.net中,我们曾经能够运行csc编译器来编译单个cs文件或多个文件.使用.net核心,我们csc坚持拥有一个合适的项目文件.是否有一个独立的命令行编译器,它允许编译源代码文件而无需项目(并列出在同一命令行上引用的依赖项)?

在Linux上,当我安装了旧的csc和新的.net核心时,我得到了这些时间:

[root@li1742-80 test]# time dotnet build
Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  test -> /root/test/bin/Debug/netcoreapp2.0/test.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:03.94

real    0m7.027s
user    0m5.714s
sys     0m0.838s

[root@li1742-80 test]# time csc Program.cs
Microsoft (R) Visual C# Compiler version 2.3.0.61801 (3722bb71)
Copyright (C) Microsoft Corporation. All rights reserved.


real    0m0.613s
user    0m0.522s
sys     0m0.071s
[root@li1742-80 test]#
Run Code Online (Sandbox Code Playgroud)

使用.net核心注意7秒,使用旧csc注意几百毫秒dotnet build.

我希望能够使用.net核心快速编译,因为我曾经能够使用csc.

c# compilation csc roslyn .net-core

24
推荐指数
3
解决办法
1万
查看次数

C#编译器bug还是普通的COM奇怪?

C#4,为简化COM互操作,允许调用者在COM接口中省略ref参数前面的ref关键字.

我很惊讶今天看到这也适用于扩展COM接口的扩展方法.请参阅以下内容,编译代码:

using System;
using System.Runtime.InteropServices;

[ComImport, Guid ("cb4ac859-0589-483e-934d-b27845d5fe74")]
interface IFoo {
}

static class Program {

    public static void Bar (this IFoo self, ref Guid id)
    {
        id = Guid.NewGuid ();
    }

    static void Main ()
    {
        Foo (null);
    }

    static void Foo (IFoo o)
    {
        Guid g = Guid.NewGuid ();
        Console.WriteLine (g);

        // note that g is passed as is, and not as ref g    
        o.Bar (g);

        Console.WriteLine (g);
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有在规范中找到任何解释这种行为的内容.

我的感觉是COM接口之外的代码,即使它是扩展COM接口的扩展方法,也应该遵循常规的C#规则,并强制使用ref关键字.因此我在连接上提交了一个错误.并不是说我认为这将被修复,即使它被认为是一个bug,已经有代码依赖于此.

错误?不是一个bug?

c# compiler-construction csc c#-4.0

18
推荐指数
1
解决办法
389
查看次数

用新的Roslyn构建替换c#编译器

我正在玩Roslyn的一些更改,但不幸的是,即使是未经修改的解决方案也会在我运行时崩溃VisualStudioSetup.Next,并且在尝试加载MS程序集时出错.所以我做了一些简单的更改,用新版本替换了我机器的现有二进制文件和配置文件.改变了C:/Program Files (x86)/MSBuild/bin and Windows/Microsoft.NET/Framework64.

替换CSC,VBCSCompiler,DLL和配置文件会导致csc.exe在任何构建上抛出错误.它抱怨清单指定了不同版本的CodeAnalysis.CSharpDLL.它没有为文件甚至名称提供路径.我用新版本替换了上述文件夹中的配置和DLL.我需要实际替换哪些文件才能正常工作?

我搜索了所有CSC实例的整个驱动器,并确保所有配置指定DLL的新版本,所以我不知道现在在哪里查看.

我知道可以将参数传递给MSBuild或者向csproj文件添加一个部分来指定编译器二进制文件的目录,但是我想获得胜利.

编辑:所以我决定只更改我的版本的版本号.通过VS中的程序集属性执行此操作会导致构建失败.我尝试使用MSBuild,但在每个项目中都出现此错误:

"F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj" (default target) (1) ->

F:\Git\Repos\roslyn\build\Targets\Versions.props(42,5): 

error MSB4184: The expression ""1".Substring(3)" cannot be evaluated. 

startIndex cannot be larger than length of string. 

Parameter name: startIndex F:\Git\Repos\roslyn\src\Compilers\CSharp\csc\csc.csproj]
Run Code Online (Sandbox Code Playgroud)

它尽管从VS建立起来很好.

MSBuild参数: /p:OfficialBuild=true /p:BuildNumber=1.3.1.60616 /p:Configuration=Release

c# csc roslyn

18
推荐指数
1
解决办法
1413
查看次数

是否有任何免费的自定义搜索api像谷歌自定义搜索?

我现在正在使用谷歌JSON/Atom自定义搜索API.问题是总查询每天只有100个.需要支付额外的查询.

免费的 自定义搜索API吗?也许来自Bing或雅虎?

谢谢!

api rest search csc

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

为什么在将C#代码编译成IL时会创建.ctor()?

有了这个简单的C#代码,我就跑了csc hello.cs; ildasm /out=hello.txt hello.exe.

class Hello
{
    public static void Main()
    {
        System.Console.WriteLine("hi");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是来自ildasm的IL代码.

.class private auto ansi beforefieldinit Hello
       extends [mscorlib]System.Object
{
  .method public hidebysig static void  Main() cil managed
  {
    .entrypoint
    // Code size       13 (0xd)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldstr      "hi"
    IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_000b:  nop
    IL_000c:  ret
  } // end of method Hello::Main

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // Code size       7 (0x7) …
Run Code Online (Sandbox Code Playgroud)

c# il csc ildasm

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

如何使用CodeDOM定位特定语言版本?

使用C#代码提供程序和 ICodeCompiler.CompileAssemblyFromSource方法,我试图编译代码文件,以生成可执行程序集.

我想编译的代码使用了可选参数和扩展方法等功能,这些功能仅在使用C#4语言时才可用.

话虽如此,我想编译的代码只需要(并且需要)以.NET Framework 2.0版为目标.


使用前面的代码可以避免任何与语法有关的编译时错误,但是,生成的程序集将以框架的4.0版为目标,这是不合需要的.

var compiler = new CSharpCodeProvider(
        new Dictionary<string, string> { { "CompilerVersion", "v4.0" } } );
Run Code Online (Sandbox Code Playgroud)

我怎样才能使代码提供程序针对语言版本4.0但生成一个只需要框架版本2.0的程序集?

.net c# codedom csc

14
推荐指数
1
解决办法
1572
查看次数

Visual Studio消失了:尝试编译时"目录名无效"错误

出于一些非常奇怪的原因,我的Visual Studio 2008在尝试编译C#项目时,尝试将可执行文件的输出写入与可执行文件同名的目录,至少看起来这就是错误消息所暗示的内容.在我的任何项目上运行Compile后,CSC.EXE报告以下编译器错误:

无法写入输出文件'D:\ Projects\Examples\StringBuilderVsString\_obj\Release\StringBuilderVsString.exe' - '目录名无效."

当我查看内部obj\Releaseobj\Debug所有中间资源时,如StringBuilderVsString.pdb正确地写在该目录中.目录中没有空格.从命令提示符运行csc.exe时也会发生此错误.

运行Process Monitor时,我只看到csc.exe访问的文件的SUCCESS,我没有看到任何查询或写入不存在的位置.

任何解决这个问题的想法都是受欢迎的.

c# compiler-errors csc visual-studio-2008

11
推荐指数
1
解决办法
1万
查看次数

在C#项目中包含FSharp.Core:解决类型冲突

我正在使用C#中的一些F#类型(Matrix等),所以我需要在我的C#项目中引用FSharp.Core程序集.到现在为止还挺好.

但是,显然在mscorlib.dll(v4)中定义了一些在FSharp.Core(v2)中"重复"的类型,如System.TupleSystem.IObservable.我无法理解为什么这是在.Net 4.Matt Ellis明确表示他们将在他的MSDN文章中删除:

一种遭受[重复]问题的语言是F#,它以前在FSharp.Core.dll中定义了自己的元组类型,但现在将使用Microsoft .NET Framework 4中添加的元组.

如果我能指定我想在C#程序中使用哪一个,我已经准备好了解这个特别不合时宜的重复.System.Tuple例如,当我尝试使用该类型时,我得到以下C#编译器错误:

错误2"c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\mscorlib.dll"和"c:\ Program Files"中都存在"System.Tuple"类型(x86)\ Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.dll'

显然,解决这个问题的方法是在C#编译器命令行上切换该类型的别名:

csc.exe MyType.cs /reference:System.Tuple`2=mscorlib.dll /reference:FSharp.Core.dll

但是,我找不到让Visual Studio将此参数发送到C#编译器的方法.

有人有解决方案吗?

c# f# csc visual-studio

10
推荐指数
1
解决办法
3766
查看次数

Visual Studio 2012 csc.exe错误.可执行文件对操作系统无效

尝试在Visual Studio 2012 Professional中编译和测试任何类型的项目时,我收到以下错误.

错误1无法运行指定的任务可执行文件"Csc.exe".指定的可执行文件不是此OS平台的有效应用程序.

在线测试多个建议后,没有解决问题.谁知道是什么原因导致的?是否有新版本的Csc.exe我需要获取?我知道这是编译器只是不确定我需要做些什么来解决问题.

c# csc visual-studio-2012

10
推荐指数
2
解决办法
2万
查看次数

为什么这个递归不会产生StackOverFlowException?

这段代码有什么问题:

using System;
namespace app1
{
    static class Program
    {
        static int x = 0;
        static void Main()
        {
            fn1();
        }
        static void fn1()
        {
            Console.WriteLine(x++);
            fn1();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用这个命令编译这段代码:

csc /warn:0 /out:app4noex.exe app4.cs
Run Code Online (Sandbox Code Playgroud)

当我双击exe时,它似乎没有抛出异常(StackOverFlowException),并且永远保持运行.

使用visual studio命令提示符2010,但我也在系统上安装了vs 2012,都是最新的.

.net c# stack-overflow recursion csc

10
推荐指数
1
解决办法
400
查看次数