在运行时创建(=编译)实现已知接口的类
是否可以通过在运行时编译的代码段来提供接口的实现? 以下内容不起作用(安全类型铸件返回" null"): 完整的控制台应用程序: using System; using System.Collections.Generic; namespace Foo { using System.CodeDom.Compiler; using Microsoft.CSharp; class Program { static void Main(string[] args) { // code snippet to compile: string source =@"namespace Foo { public class Test:ITest { public void Write() {
4 2024-04-26
编程技术问答社区
动态编译C#代码而不使用原来需要的程序集
我正在在软件中动态地编译最终用户编写的C#代码.为了编译代码,我需要添加一些汇编作为参考编译器. CompilerParameters loParameters = new CompilerParameters(); loParameters.ReferencedAssemblies.Add("C:\A.dll") loParameters.ReferencedAssemblies.Add("C:\B.dll") 因此,我应该使用我的软件发布这些组件(" A.dll"和" B.Dll"),但是由于安全原因,我不希望用户可以通过反向工程访问这些组件的来源. 注意1 :我可以在所需的组件中删除方法的实现(a和b),但是我的组件非常大,我不能手动做. 注2 :我知道混淆,但我不想使用它. 注释3 :我只需要成功编译代码,而我不想运行它. 解决方案 我假设A.dll和B.dll是您的组件? 如果是这样,方法是仅将接口曝光到这些库(即将您的接口和实现放置在单独
6 2024-04-26
编程技术问答社区
在运行时编译独立的C#文件,该文件引用另一个文件
在此链接我正在尝试在运行时编译生成的.CS文件.该文件(调用gen.cs)是由编码生成的,并子类另一个文件(称为base.cs).我从运行时汇编中获取以下错误消息: 找不到类型或命名空间名称`base'.您是否缺少使用指令或汇编参考? 我知道此错误意味着它在编译时找不到base.cs.我是C#的新手,并且动态地编译C#文件,因此很难分开.基本和gen都不使用名称空间,两个.cs文件都在同一目录中.有什么我缺少的吗?为什么gen.cs不能见base.cs? 编辑 - 这可能是或可能不相关的,但这是通过GMCS进行手册汇编的结果(我在MacOS上) mtrc $ gmcs -lib:base.cs gen.cs gen.cs(13,27):错误CS0246:类型或名称名称 找不到"基础".您是否缺少使用 指令或集会参考? 解决方案 通常,编译器只会编译该文件,该文件被告知要在单个通行证中进行编译. IE:在命令行上指定所有.cs名称,或指定给定文件夹中的所有.
8 2024-04-25
编程技术问答社区
汽车财产是如何汇编的?
我在看到有关属性和自动属性的一些问题和答案以及编译器如何代表的问题和答案. 据我所知,自动质体被表示为一个字段,其中有两种方法,一个getter a a setter.在这种情况下,如果使用字段,则访问该字段的代码应比访问属性的代码更快,因为它可以避免任何suplimentar调用方法.为了证明这一理论,我正在编写以下代码,请原谅我的外观: public class A { public int Prop { get; set; } public int Field; public A() { Prop = 1; Field = 1; } } class Program { static void Main(string[] args) { List propertyExecutionTimes = new List(); List
4 2024-04-24
编程技术问答社区
创建一个能产生自定义EXE'的.NET程序
我想创建一个生产可执行幻灯片的程序. 因此,我需要它输出带有一些必需的代码和某些嵌入式资源(图片)的EXE. .NET是否提供了这种功能? 解决方案 您可以使用CSHARPCODEPROVIDER类在运行时编译代码并添加嵌入式资源.看看这篇文章,我可以在其中解释如何做: slideshow Builder 其他解决方案 这很容易完成. 您可以添加图片作为嵌入式资源,然后使用反射技术发现和检索嵌入式图片. 因此,您编写的程序独立于图片列表,这些图片列表只是嵌入式资源.您可以使用Visual Studio将图片嵌入为资源,也可以创建自定义程序进行. 您可以在祝你好运! 其他解决方案 这将使用指定名称为您生成一个过程(您仍然需要为图片添加代码): public static Process GenerateRuntimeProcess(string processName, int aliveDuration, bool th
16 2024-04-24
编程技术问答社区
如何使用MsBuild和VS2017编译器通过批处理文件构建C#, C++, C解决方案?
我正在使用批处理文件中使用msbuild构建解决方案,如下所示: @echo off set msBuildExe="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" set solutionsFile="C:\TestProject\mySln.sln" rem Build the solutions: %msBuildExe% /t:Build /p:Configuration=Release /p:Platform=x64 %solutionsFile% 问题是我安装了多个版本的Visual Studio版本,我想指向MSBUILD.EXE使用VS2017的编译器. 我该怎么做? 解决方案 您需要在这里进行两个分开的东西:MSBuild,以驱动构建过程,以及编译器/链接器/...以执行实际的构建阶段.这些实际上是正交的(理论上,不确定它在实践中走了多远):只要为这些设置设置环境,
2 2024-04-24
编程技术问答社区
CSHTML文件不再被编译
在使用ASP.NET MVC应用程序工作时,我遇到了旧的旧"当前源代码不同于App_web_blahblah.dll中的版本"当我尝试调试CSHTML文件时临时ASP.NET文件,PDB,清洁和重建等). 更令人不安的是,相关的CSHTML页面不再编译.我的意思是,该应用程序仍在显示页面的旧版本,即使该页面已更改. 此页面上没有错误(同一源代码在另一台计算机上可以正常工作).即使有的话,我也会得到ysod,仅此而已. 更重要的是,它不再显示不再在源代码中的数据,即使我以前清洁了临时文件和dll,因此我无法在此页面上工作. 我检查了那里和 ,但没有答案解决问题. 所以我的问题很简单:应用程序可以在哪里找到不在任何地方的代码(AFAIK)?我是否不知道可以存储编译文件的位置?发生了什么事? 解决方案 我的评论有所帮助,所以我会写答案. 此错误是从另一个目的地添加到项目文件中的.您正在修改不在正确文件夹中的文件,但旧文件仍在那里.应用程序运行了旧的,
8 2024-04-24
编程技术问答社区
构建后事件的失败?
在构建后事件中某些情况下,有没有办法迫使构建失败?我正在使用运行JSlint和其他一些解决方案的软件包在构建后一起使用,我希望Visual Studio失败,如果JSlint产生错误. 我知道VS2010的JSLINT插件将使构建失败,但是我的要求限制了我使用包含JSlint的包装错误检查解决方案. 解决方案 帖子构建事件基本上是批处理脚本 - 您可以使用" if ErrorLevel"检查错误返回值. 失败复制命令的示例: copy "$(ProjectDir)myfile.ext" "$(TargetDir)" if ERRORLEVEL 1 goto EXIT :EXIT 其他解决方案 我相信有一个称为ChintoronError和breakonError等属性,可以添加到这些后构建事件中.您可以看一下..我是否实现了这一点,但是nw没有对我的机器访问,如果这不能解决您的问题或SMBody无法解决.
2 2024-04-23
编程技术问答社区
为什么我的申请说我缺少推荐信,尽管我有推荐信?
我目前正在学习将C#代码编译到自己的EXE文件中. 它的运作方式真的很有趣! 到目前为止,我已经有一个非常小的应用程序,该应用程序应该将文本中的文本转换为C#代码,但它一直告诉我每次按"构建"添加参考文献,我不知道为什么. 这是源代码: using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; using System.Windows; namespace SimpleBuilder { /// /// Interaction logic for MainWindow.xaml /// store code /// select what features /// print out textfile with all the code from the
4 2024-04-22
编程技术问答社区
得到错误,不是所有的代码路径的返回值由c#编译器
这是一个基本的字符串反向程序,我想在其中做一些异常处理.但是在编译期间,这给了我一个错误"不是所有代码路径返回值.我无法找出为什么 public static string Reverse(string s) { try { if (string.IsNullOrEmpty(s)) { throw new NullReferenceException(); } char[] c = s.ToCharArray(); int start = 0; int end = c.Length - 1; char temp; whil
10 2024-04-22
编程技术问答社区
C#对字符串和.cs文件进行动态编译
我正在在一个网站上工作,用户可以在浏览器文本区域中实现C#代码解决方案并提交.然后,服务器将与我在服务器上提供的预定义接口一起编译该代码.将其视为一种策略设计模式;我提供了策略接口,用户实现了它.因此,我需要在运行时将字符串和预定义的 *.cs文件一起编译.这是我现在只编译字符串部分的代码: CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp"); CompilerParameters parameters = new CompilerParameters(); parameters.OutputAssembly = "CodeOutputTest.dll"; // need to name this dynamically. where to store it? parameters.GenerateExecutable = false; parameters.IncludeDebug
2 2024-04-22
编程技术问答社区
如何用 pyproject.toml 代替 setup.py,以实现本地 C 语言构建依赖关系?
我遇到了这个这个用于创建的小项目 black-scholes 函数的c编译版本. 尽管该示例代码似乎已于今年7月发布,但似乎使用了setup.py的构建类型,超出了传统构建.任何汇编都失败了,首先抱怨丢失 MS C++ 14 编译器(这是不正确的),然后进一步研究似乎表明无法使用setup.py. q:如何将setup.py转换为有效pyproject.toml文件? from setuptools import setup, Extension ext = Extension('bs', sources=['black_scholes/bs.c']) setup( name="black_scholes", version="0.0.1", description="European Options Pricing Library", packages=['black_scholes'], ext_modules=[ext]
20 2024-04-22
编程技术问答社区
如何为多处理器机器编译C#? (用VS 2010或csc.exe)
问候! 我已经在我即将毕业的大学有一个11个机器集群(有6个四核和5个四核双培训机器).它在Linux下运行,但我可以在那里安装单声道.而不是用多个处理器或内核来编译,我想为多个处理器机器编译.所以: 是否有有关如何执行此操作或该系统上的CLR处理执行以将其传播到核心的任何细节? 如果有办法这样做,我该如何使用VS2010或CSC.EXE命令行编译器? 事先感谢,如果这个问题没有意义,我很抱歉.我真的不知道该如何处理多个核心,因为我只是一名物理学家,而不是计算机科学家!:) 解决方案 由于它是一个集群,因此您必须依靠某种形式的消息并行性,因此没有编译器会自动转换您的代码.至少支持一个良好的旧MPI: http://osl.iu.edu.edu.edu/research/mpi.net/ 其他解决方案 您不需要汇编任何不同的汇编即可考虑多个内核.但是,您需要以不同的方式编写代码来使用多个线程.如果您可以在环境中使用.NET 4的类(Mono的最新版本应该
6 2024-04-21
编程技术问答社区
编译器版本与.NET框架版本--ASP.NET应用程序的场景
方案: 我有vs 2010(c#4编译器)针对我的客户端机器的3.5. 我正在开发ASP.NET应用程序.我在类文件中使用可选参数(支持的C#4),并编译代码似乎可以正常工作. 稍后在运行时发现的问题,其中一个旧的(经典)ASPX正在使用该功能.否函数仅接受x参数,其中x比可选参数少的一个是运行时错误. 这是否意味着正常的类,并且使用客户端的C#编译器,而视图(ASPX)和此类编译器在服务器上使用编译器 - 因此,如果在视图/表单文件中使用C#4,则会引起问题? 解决方案 我相信这与IIS的ASPX页面(re?)在IIS上汇编而不是在Visual Studio中编译的事实有关.这使他们可以随时更新而无需重新编译,但是由于IIS汇总会带来您所看到的并发症. 我不知道让IIS使用C#4编译器,但编译为.NET 3.5,因此似乎您唯一的选择是: 更新到.NET 4 不要使用可选参数 请勿调用使用.appx文件中使用可选参数的代码.我猜想,如果您将
2 2024-04-20
编程技术问答社区
是否有C#语言版本的指令
是否存在区分语言版本的预定义常数,例如: #if C#6 //code #else //code #endif 解决方案 您不必这样做. 通常,您会做类似的事情来支持.NET框架的不同版本. C#编译器的版本没有不同的版本.较新的编译器可以针对框架的较旧版本.简而言之,使用最新的C#编译器功能.编译器是免费的,因此没有任何真正的障碍来更新项目以使用最新功能. 其他解决方案 根据您的环境,您可以依靠平台版本.如果项目不使用自定义的显式语言版本,则可以尝试使用目标框架指令. com/en-us/dotnet/csharp/language-reference/configure-language-version#默认 .NET Framework NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35,
10 2024-04-20
编程技术问答社区
C#编译器/optimize命令行选项是否影响JITter?
我一直在阅读 eric lippert"> eric lippert ' .com/b/ericlippert/Archive/2009/06/11/what-do-does-the-the-timize-switch-do.aspx" rel =" nofollow noreferrer"> actits 关于/优化命令行选项的 C#编译器.本文描述了编译器执行的优化.但是,我尚不清楚此选项是否也影响JIT优化.这不是不可想象的,此选项将使编译器发出一些元数据,抖动可以理解以更改"优化模式".如果此选项确实确实会影响抖动? 是否有任何参考可以确认或其他情况? 解决方案 如果此选项确实会影响抖动? 是否有任何参考可以确认或其他情况 根据杰弗里·里希特(Jeffrey Richter)在他的CLR中通过C#Book,第三版(第1章,第13页)的说法,确实如此. /optimize+开关将对C#IL代码以及JIT编译器生成的本机代码进行优化.至于,我不确定它实际上是这样做的.我
6 2024-04-20
编程技术问答社区
运行时代码编译出现错误-进程不能访问文件
i HAVA小型Windows应用程序,其中用户输入代码和按钮单击事件代码在运行时编译. 当我单击按钮第一次工作时,它可以正常工作,但是如果单击相同的按钮多一次给出错误"该过程无法访问exmaple.pdb文件,因为它是由另一个过程使用的." .以下是示例示例代码 using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Reflection; using System.IO; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() {
6 2024-04-20
编程技术问答社区
在.NET 4中编译.NET代码?
我记得.NET 4在Beta中时,有一个开发人员制作了一个命令行应用程序的视频,他可以将其输入C#代码,并且可以即时编译代码.这个想法是编译器现在以.NET语言可用. 有人记得这在哪里?我需要用小宏语言创建一个应用程序,我很想将C#用作宏语言,但我不知道在哪里可以找到此库. 解决方案 您可以使用您需要制作样板模板以将宏命令包装在类中的静态方法中. 例如: static readonly Assembly[] References = new[] { typeof(Enumerable).Assembly, typeof(Component).Assembly }; public Action CompileMacro(string source) { var options = new CompilerParameters(References.Select(a => a.Location).ToArray()) { GenerateIn
0 2024-04-20
编程技术问答社区
无法解释的MissingFieldException
在以下代码段中,它会引发一个缺失的fieldException:找不到字段:depthBidlevels异常,但仅在某些怪异的情况下描述. for(int i=DomSize-1; i>=0; i--) { fixed( ushort *p = binary.DepthBidLevels) { if( i!=DomSize-1) { builder.Append( ","); } builder.Append( *(p + i)); } 二进制变量的类型是在单独的组件中定义的结构: unsafe public struct TickBinary { public const int DomLevels = 5; public const int SymbolSize = 8; public const int minTickSize = 256; public long Symbol;
12 2024-04-20
编程技术问答社区