【问题标题】:How to compile C# application through Command Prompt如何通过命令提示符编译 C# 应用程序
【发布时间】:2014-09-03 14:34:55
【问题描述】:

我有一个文件夹。我有三个 cs 文件。

Demo.cs

using System;

namespace Demo
{
    public class Test
    {
        public static Entity entity = new Entity();

        public static void Main(string[] args)
        {
            var objectHandler = Activator.CreateInstance(null,
                                                         args);
            var obj = objectHandler.Unwrap();
            entity.GetAnnotation(obj.GetType());
        }
    }
}

Entity.cs

using System;

namespace Demo
{
    public class Entity
    {
        public void GetAnnotation(Type classname)
        {
            Attribute[] dataAnnotationlist = Attribute.GetCustomAttributes(propInfo);
            foreach (var dataannotationAttribute in dataAnnotationlist)
            {
                //some operation to get annotation property from Employee.cs class
            }
        }
    }
}

Employee.cs

using System.ComponentModel.DataAnnotations;

namespace Demo
{
    public class Employee
    {
        [Display(Name = "name")]
        public string name { get; set; }
    }
}

我使用反射从类文件 (Employee.cs) 创建了 XML 文件格式。 但是尝试通过命令提示符运行时发生错误。它在视觉工作室中运行。

我想使用命令提示符运行 Test.cs、Entity.cs,并将“Employee.cs”作为字符串参数传递给 Main 方法。 现在,我通过了硬编码,

System.Runtime.Remoting.ObjectHandle objectHandler = Activator.CreateInstance(null, "Demo.Employee");

它工作正常,但是如何通过命令传递它。

发生的错误是:

Entity.cs(8,29):错误 CS0234:类型或命名空间名称 命名空间中不存在“DataAnnotations” “System.ComponentModel”(您是否缺少程序集引用?) Entity.cs(9,19):错误 CS0234:类型或命名空间名称 '对象' 命名空间“System.Data”中不存在(您是否缺少 程序集参考?)Employee.cs(6,33):错误CS0234:类型或命名空间名称'DataAnnotations'确实 命名空间“System.ComponentModel”中不存在(您是否缺少 汇编参考?)

它还显示“DataAnnotations”和“Objects”的错误。

我该如何解决这个问题?

【问题讨论】:

  • “当尝试通过命令提示符运行时”是什么意思?你能显示你使用的命令吗?
  • System.Data.DataAnnotations 命名空间的成员在 System.ComponentModel.DataAnnotations.dll 程序集中声明。被引用了吗?
  • csc /out:Test.exe Test.cs Entity.cs Employee.cs
  • 是的,我已经在我的项目中添加了这个 dll,但它在命令提示符下显示错误。
  • 我已经更新了标题“运行”->“编译”,因为看起来您实际上是在尝试编译文件而不是运行。随意改进/恢复。

标签: c#


【解决方案1】:

一个简单的选择build .csproj with MSBUILD

更有趣的是通过 csc 的命令行参数自己配置所有依赖项。对于您的即时错误,您需要使用类似于以下的/r: 命令添加引用

 csc /out:Test.exe /r:System.ComponentModel.DataAnnotations.dll *.cs

有关 csc 命令行参数的更多详细信息,请查看帮助 csc /? 或 MSDN CSC command line optionsBuilding with CSC

【讨论】:

  • 我试了一下,但是如何使用命令提示符将类作为参数传递给 Test.cs 中的 Main 方法
  • @user3582190 您在寻找test.exe arg1 吗?如何从命令行运行可执行文件并将参数传递给它将是 SO 的主题。如果这是您真正的问题 - 请考虑 superuser.com 了解更多信息...
  • 是的,我正在寻找 Test.exe arg1 但在这里我将类名作为参数传递。
  • Test.cs "Demo.Employee"
  • 它显示错误,未处理的异常:System.ArgumentNullException:值不能为空。参数名称:ActivationContext at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData) at System.Activator.CreateInstance(ActivationContext activationContext, String[] activationCustomData) at Demo.Test.Main(String[]参数)
猜你喜欢
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多