2016-04-02 30 views
1


bir sunucu uygulaması için bir komut sistemi ekleyerek çalışıyor ive
sorundur: proje içinde olmayan ancak
onlar başka bir klasöre derlenen komutunun .cs dosyaları çalışma zamanı hiçbir şey incitemez.
C# csharpcompiler derleyici derleme şey alamıyor

derleyici kodu:

static CompilerResults Compile(String path) 
     { 
      var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); 
      var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "DS Server.exe", true); 
      parameters.GenerateExecutable = true; 
      return csc.CompileAssemblyFromFile(parameters, path); 
     } 

dış .cs kod dosyası:

using DS_Server; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net.Sockets; 
using System.Reflection; 
using System.Text; 
using System.Threading.Tasks; 

namespace JMnet 
{ 
    class command 
    { 
     public void run(TcpListener server,Dictionary<String,user> users , Dictionary<String, Assembly> Commands, String[] args) 
     { 
      foreach (user usr in users) { 
       var IP = ((IPEndPoint)usr.getClient().Client.RemoteEndPoint).Address.ToString(); 
       Core.Log.Geneic("Players",IP+" is connected as "+usr.getName()+", ping: "+usr.getPing().ToString()); 
      } 
     } 
    } 
} 

hataları:

server started 
Starting C-Sys 1.0 
Found 2 commands to register 
compiling kick 
[Compiler]: c: \ csys \ cmd \ kick.cs (1,7): error CS0246: The type or namespace name DS_Server not found (missing a using statement or assembly reference?) 
[Compiler]: c: \ csys \ cmd \ kick.cs (5,14): error CS0234: The type or namespace name just does not exist in the namespace System (missing an assembly reference?) 
[Compiler]: c: \ csys \ cmd \ kick.cs (8,24): error CS0234: The type or name of the Tasks namespace does not exist in the namespace System.Threading (missing an assembly reference?) 
[Compiler]: c: \ csys \ cmd \ kick.cs (14,25): error CS0246: The type or namespace name TcpListener not found (missing a using statement or assembly reference?) 
[Compiler]: c: \ csys \ cmd \ kick.cs (14,62): error CS0246: The type or namespace name user is not found (missing a using statement or assembly reference?) 
Registered kick 
compiling players 
[Compiler]: c: \ csys \ cmd \ players.cs (1,7): error CS0246: The type or namespace name DS_Server not found (missing a using statement or assembly reference?) 
[Compiler]: c: \ csys \ cmd \ players.cs (5,14): error CS0234: The type or namespace name just does not exist in the namespace System (missing an assembly reference?) 
[Compiler]: c: \ csys \ cmd \ players.cs (8,24): error CS0234: The type or name of the Tasks namespace does not exist in the namespace System.Threading (missing an assembly reference?) 
[Compiler]: c: \ csys \ cmd \ players.cs (14,25): error CS0246: The type or namespace name TcpListener not found (missing a using statement or assembly reference?) 
[Compiler]: c: \ csys \ cmd \ players.cs (14,62): error CS0246: The type or namespace name user is not found (missing a using statement or assembly reference?) 
Registered player 

cevap

2
Bu bölümde

:

var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "DS Server.exe", true); 

Eğer derleyici bulamazsa her türlü ilan derlemeleri eklemek gerekiyor. Sadece mscorlib.dll ve System.Core.dll dosyalarını içerir, ancak derlenmiş kodun kullanması gereken tüm diğer derlemeleri de eklemeniz gerekir.

Bu, örneğin olabilir:

var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll", "System.dll", "DS_Server.dll" }, "DS Server.exe", true); 

sen meclisleri listesini belirtmek nereye, montajlar ihtiyaç vardır, ne önceden bilmek derlemek istediğiniz * .cs dosyasında yanında bir yapılandırma dosyası koyamazsınız yüklemek için. Ayrıca


, burada:

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); 

Eğer örnek System.Threading.Tasks için gibi bazı yeni özellikler içermiyor .net Framework sürüm 3.5 kullanmak için derleyici söyleyin. Örneğin 4.0 veya üzeri için böyle yüksek bir sürüm numarası ekle:

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v4.0" } }); 
+0

bu biliyor musunuz, bana –

+0

için bu şimdi teşekkür çalışacağız nasıl CSharpCodeProvider için proje içinde ad dahil etmek? –

+0

Hi çalıştı hızlı cevap – Adib