问题标签 [csc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
622 浏览

c# - CSharp 编译器无法打开父目录中的文件

我正在尝试编译一个位于我项目的同级目录中的 cs 文件,但 csc 无法打开它。这是触发问题的命令行示例:

Csc 打印此消息:

真正奇怪的是它剥离了“../test”部分。

任何人都知道如何进行这项工作?谢谢

0 投票
1 回答
12168 浏览

c# - 通过命令行编译c#代码时如何使用引用

谁能帮我通过命令行编译一些 c# 文件?我有 4 个文件要编译,Main、Form1(使用 2.cs 文件)和项目中使用的另一个类。

我想在命令行中编译这个项目,这样我就可以添加 /t:library 开关(就像在本教程中一样:http: //dotnetslackers.com/articles/csharp/WritingAnActiveXControlInCSharp.aspx)。

但是,在使用“csc /t:library Program1.cs MainForm.cs MainForm.Designer.cs EigenObjectRecognizer.cs”后,我得到了缺少程序集参考错误,例如:

我确实安装了 EMGU 二进制文件。我认为我需要使用该文件夹中的一些 .dll,例如 EMGU.CV.dll?

0 投票
1 回答
780 浏览

c# - 更改 Visual Studio 2010 的进程内编译器?

这是对以下内容的后续:使用异步委托/lambda 进行投影

显然,异步 CTP 有一个我遇到的错误,我需要使用 VS11 编译器。在命令行中,msbuild即使针对用 VS2010 编写的项目运行,仍然可以使用 VS11 编译器进行编译,因为 VS11/.NET 4.5 就地安装在 .NET 4.0 目录中。

但是,在 Visual Studio 2010 中,使用了一个进程内编译器,似乎还没有升级到新的 VS11 编译器。

我可以(通过一些hackery / DLL 操作)更改Visual Studio 2010 使用的编译器吗?在 VS11 支持 Windows Azure 之前,这只是一个 hack/解决方法,这样我就可以升级到 beta/release Candidate/RTM。

0 投票
3 回答
26145 浏览

c# - csc.exe 引用外部 .dll 文件

我正在尝试c#使用Growl C# API.

我尝试以两种不同的方式编译我的程序:

1)我将.dll文件保存在与文件相同的目录中.cs。比我跑

它编译得很好,也运行得很好。

2)现在我在当前工作目录中创建了一个目录,命名为growl并将所有.dll引用保存在那里。

现在,当我尝试使用以下命令编译它时

它编译得很好,但是当我尝试运行它时,发生了下面提到的异常。

所以,我的问题是当文件位于外部文件夹中时,引用.dll文件的正确方法是什么。csc

这是第二种情况的目录结构

0 投票
1 回答
1736 浏览

c# - Visual C# 2010 命令行参数到 csc

在 Visual C++ 2010 中,我可以看到传递给 cl.exe 的参数:

在此处输入图像描述

这非常有用,因为有时您忘记检查这个或那个选项,在这里和那里添加一些目录等等,并且一次查看所有命令使得这很容易发现。

我想知道 Visual C# 2010 是否有类似的东西。我在任何地方都看不到“命令行”选项卡。显然,早期版本在“输出”>“构建”选项卡中显示了“任务:csc”行,但我在 Visual C# 2010 SP1 生成的输出中没有找到类似的内容。

是否有可能获得我正在寻找的东西?

注意我知道我可以从 MSBuild 获取参数,但不幸的是,由于依赖项解析失败,MSBuild 无法构建我的一些解决方案。我正在寻找一个纯 Visual Studio IDE 解决方案。

0 投票
1 回答
1997 浏览

clr - 在 .NET 2.0 中使用扩展属性转义 Catch-22

同时针对 2.0、3.0、3.5、4.0 和 4.5 的单个 .NET 程序集如何支持 C# 和 VB.NET 使用者的扩展方法?

标准建议是添加以下内容:

这种方法由不止一位 Microsoft 员工建议,甚至MSDN杂志中出现。它被许多博主广泛称赞为“没有不良影响”。

哦,除了它会导致针对 .NET 3.5 或更高版本的 VB.NET 项目的编译器错误。

Microsoft.Core.Scripting.dll 的作者想通了,并将“公共”更改为“内部”。

这似乎解决了VB兼容性问题。

因此,我信任地将这种方法用于广泛使用的 ImageResizing.Net 库的最新版本(3.2.1) 。

但是,对于某些针对 .NET 3.5+ 的用户,我们开始或多或少随机地收到此编译器错误(原始报告)。

因为 MSBuild/VisualStudio 编译器在解决命名冲突时显然不会费心查看范围规则,并且程序集引用的顺序扮演的角色并不完全记录,所以我不完全理解为什么以及何时发生这种情况。

一些 hacky 解决方法,例如更改程序集命名空间、重新创建项目文件、删除/读取 System.Core,以及调整 .NET 框架的目标版本。不幸的是,这些变通方法都不是 100%(除了混叠,但这是一个不可接受的痛苦)。

我该如何解决这个问题

  1. 维护对在程序集中使用扩展方法的支持,
  2. 维护对 .NET 2.0/3.0 的支持
  3. 每个 .NET 框架版本不需要多个程序集。

或者,是否有让编译器注意范围规则的修补程序?

未回答此问题的关于 SO 的相关问题

0 投票
1 回答
1206 浏览

msbuild - 在 CoreCompile MSBuild 任务启动的 CSC.exe 上设置处理器关联

我想知道是否有简单的方法可以确保:编译 C# 项目时,Csc.exelaunch 继承父处理器关联设置;或者我可以提供这种方式。

我一直在尝试通过bat从 VS.NET cmd 提示符启动一个文件来完成此操作:

在我的里面我custombuild.cmd有:

生成的命令行调用Csc.exe如下所示:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe ...(为简洁起见,其余部分省略。)

我想Csc.exe继承处理器亲和力,或者一种能够覆盖Csc.exe调用生成方式的简单方法,使其变为:

start /affinity 01 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe ...(为简洁起见,其余部分省略。)

我还注意到 CoreCompile 目标是在 Microsoft.CSharp.targets 中定义的,我是否应该考虑覆盖 MSBuildToolsPath 变量以便我可以潜入我自己的版本。这感觉相当hacky。任何帮助将非常感激。

状态更新: 我发现由 csc 任务启动的 csc.exe 进程实际上是在 Task 类成员的 ExecuteTool 方法中准备的,并且我创建了一个自定义任务 CpuAffineCscTask,它派生自 Csc 并覆盖了 ExecuteTool 方法。我的目标是在挂起状态下使用对 CreateProcess 的 pinvoke 调用启动 csc.exe,然后设置关联性,然后恢复线程。我还使用反射来正确设置各种变量的状态等。现在我试图覆盖在 MicrosoftCSharp.targets 文件中定义的 CoreCompile 目标,但是当我的目标运行时出现以下运行时错误。周围有这方面的已知例子吗?即使整个 cmd 在 msbuild 诊断输出中正确打印出来。诊断输出如下供您考虑。

任务 "MSBuild.Tasks.CpuAffineCscTask" (TaskId:14) C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /unsafe+ /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn: 4 /doc:..\Bin\Release\Ugp.Igt.Core.XML /define:TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\mscorlib。 dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\ Microsoft\Framework.NETFramework\v4.0\WindowsBase.dll" /debug:pdbonly /filealign:512 /keyfile:..\StrongNameKeyFile.snk /optimize+ /out:obj\Release\Ugp.Igt.Core.dll /target:库 ..\DevelopmentKitVersionInfo.cs AnonymousDisposable.cs ByteArrayExtensionMethods.cs TypeMustImplementMethodAttribute.cs WeakEvent。cs "C:\Users\bhatiah\AppData\Local\Temp.NETFramework,Version=v4.0.AssemblyAttributes.cs" (TaskId:14) E:\source\Core\Microsoft.CSharp.targets(217,3):错误 MSB6001:“Csc.exe”的命令行开关无效。值不能为空。E:\source\Core\Microsoft.CSharp.targets(217,3):错误 MSB6001:参数名称:SafeHandle 不能为空。 完成执行任务“Igt.MSBuild.Tasks.CpuAffineCscTask”——失败。(TaskId:14)在项目“Igt.Core.csproj”中完成构建目标“CoreCompile” - FAILED。:(TargetId:37)目标“_CheckForCompileOutputs:(TargetId:38)”在文件“c:\ Windows \ Microsoft. NET\Framework\v4.0.30319\Microsoft.Common.targets” 来自项目“E:\source\Core\Igt.Core\Igt.Core.csproj”(目标“_CleanGetCurrentAndPriorFileWrites”取决于它):

任何帮助将不胜感激。

PS:我正在重定向所有三个 IO 流,因为我使用的是 CreateProcess 和管道,但是创建后我使用 Process.getProcessById .net 方法来获取对进程对象的引用并附加处理程序。


耐寒

0 投票
1 回答
94 浏览

c# - 编译器如何处理这些通用插件接口实例方法?

我正在使用一些不幸的是大部分未记录的现有代码,并且我无法理解它如何调用它加载的插件的方法。

我目前的目标只是进入通过插件管理器加载的方法之一,因为它会导致异常。但是,我必须从源代码重建 pluginManager 以获取调试符号,并且当我引用这个新的 DLL 版本时,编译器会抛出武器。

该代码似乎将插件加载到plug.Instance其中,然后像这样访问特定方法plug.Instance.ReturnLeaNumber(); 这个编译器错误是有道理的,因为它不知道插件的详细信息。让我困惑的是编译器是如何知道这些在运行时之前有效的,当时没有插件被初始化。我可以单步调试旧 DLL 现在无法使用的代码!

这是程序加载插件的示例。

如果我重建的库和以前工作的库之间有任何差异,我无法判断版本与我们的源代码控制中的版本如何匹配。将不胜感激一些关于从哪里开始寻找的建议!

PasteBin 上的其余管理器代码

编译器如何在运行前知道这些plug.Instance.Method()方法?

编辑:

我还没有完全解决这个问题,但是我错过了一个“PluginsService”文件,它部分反映了“GenericPluginServices”。我认为这个错误可能是由于我删除了与我正在研究的现已失效的插件相关的此类的部分内容。但是我认为发布这个其他代码片段会帮助解决这个问题。

PluginService.cs 代码 GenericPluginService 代码

0 投票
1 回答
819 浏览

wpf - 安装VS2012RC后参考错误

我们使用 dmake 构建机器,使用 VS2010 进行本地构建。一切正常,然后我安装了 VS2012 RC(终极版)。

它在 Visual Studio 中构建正常,尽管我收到了一堆这样的警告:

但是,dmake 会抛出一堆错误消息,它们看起来都是这样的:

从错误消息中,您可以看出我们使用的是.NET 的签入版本(因此我们有一个稳定的测试环境),并且似乎安装了 VS2012 导致了 VS2010(或至少 CSC VS2010 附带的)来查找 WPF 程序集的其他副本。

还有其他人遇到这个吗?我知道有几种方法可以开始解决这个问题,但我希望有一种更直接的方法来解决这个问题。

0 投票
4 回答
9662 浏览

c# - 如何在.NET中将一个项目编译成多个dll

我正在尝试将一个 .Net c# 项目编译成多个 dll。但事情就是这样。

这是我的项目结构。

我想把这个项目编译成 File1.dll 和 File2.dll。File1.dll 和 File2.dll 都使用 Dir1 和 Dir2 中的各种 .cs 文件中的代码。File1.cs 需要子目录中的 .cs 文件中的这些类,而 File2.cs 需要其他类。File1.cs 和 File2.cs 都会使用一些。

我使用了以下内容:

但是生成的 dll 是彼此的精确副本,只是文件名不同。有没有办法让我编译它们,这样当我检查对象浏览器中的每个 dll 时,它只有那些来自 Dir1 和 Dir2 中的 .cs 文件的类,这些类在 File1.cs 中为 File1.dll 引用,对于 File1.dll 和类似的文件2.dll?

我想最好将其作为 Visual Studio 中后期构建步骤的一部分。

谢谢你的时间...

编辑

感谢您的所有回复。有很多建议将解决方案拆分为多个项目。虽然这是一种方法,但我不确定是否要为这两个 dll(即 File1.dll 和 File2.dll)创建任何依赖项。让我解释..

我在创建多个项目时看到的问题是 File1.cs 和 File2.cs 都需要一些代码。我不希望它们在两个项目中重复。将公共代码保留在第三个项目中意味着将创建 File1.dll 和 File2.dll 都需要的第三个 dll。我不想要这个。我只想创建 File1.dll 和 File2.dll,这就是为什么我将它们都保存在一个项目中的原因。关于如何实现这一点的任何建议?

再次感谢您的回复。

干杯。