Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Desert Fox
Thema: Debugger zeigt Array/List nur bis zum 14. Eintrag, danach nur Fragezeichen (in Hex-Ansicht gehts)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

kann man das file mit notpad öffnen, wenn ja was zeigt es an?

Hört sich für mich fast so an als wäre der Teil ab zeile 14 in einem anderen Encoding, z.B. ASCII anstelle von UTF16. Du könntest z.B mal ein bisschen code oder die Textdatei uploaden dann kann man dir vieleicht mehr helfen.

Thema: Gibt es eine Regel, wie viele Threads in einer Anwendung (für maximale Performance) sinnvoll sind?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Naja soviele threads hab ich nie da ich immer einen Threadpool verwende.

Zu deiner Frage, der thread pool von microsoft verwendet bis zu 25 pro prozessor kern
ThreadPool-Klasse

Thema: WCF Service dynamisch generieren
Am im Forum: Netzwerktechnologien

Hallo, ich möchte gerne einen WCF service dynamisch genierieren, die typen und methoden werden z.B in einer Xml definiert (heißt existieren erst zur laufzeit). Die webservice methoden sollen dann am client wiederum dynamisch aufgerufen werden.

Mein erster Gedanke war die proxy classe und die Parameter classen mit CodeDOM oder System.Reflection.Emit zu generieren und dann per Reflection die Methoden aufzurufen.
Allerdings kostet mich das einiges an performance bei jedem call dann per reflection die parameter generieren muss (die dann von WCF per reflection wieder ausgelesen werden).

Mein zweiter gedanke war jetzt dass ich einen eigene Implementierung von System.Type um meine Xml wrappe wodurch bei den Aufrufen es keine performance einbuße durch reflection gibt. Allerdings generiert der DataContactSerializer die objekte nicht per reflection sondern allokiert deren erwartete speichergröße und füllt diese dann manuell wenn ich micht irre oder?

Mein dritter gedanke war das ich eventuell das Message Objekt von WCF irgentwie nutzen könnte um so meien SOAP messages selbst zu generieren, allerdings ist das ja dann doch etwas zu aufwendig, wenn ich SOAP, REST etc selbst implementieren will.

Jetzt war meine frage was wäre die beste (und performanteste) lösung soetwas umzusetzen? Das ganze soll teil eines Frameworks werden, desswegen geht es mir so sehr um die performance. Ich weiß objekte mit Reflektion zu generien ist schon verdammt schnell, kostet allerdings doch einiges an leistung.

Thema: Emails versenden in .NET 4?
Am im Forum: Netzwerktechnologien

Naja das sich SmtpClient nicht geändert hat stimmt nicht ganz, microsoft hat unter der haube einiges geändert und es gibt u.a. ein paar bugs (z.B wenn man anhänge über 4 mb mitschickt (Cannot send E-Mails with large attachments (System.Net.Mail.SmtpClient, System.Net.Mail.MailMessage)) für den es einen hotfix gibt, und bei attachment namen die umlaute enthalten oder über 18 zeichen waren wird der Attachmentname verwurstelt.

Wenn die EMail einfach nicht ankommt könntest du versuchen mal die from und to adresse zu ändern, das hier eventuell security probleme vorliegen und die mail desshalb nicht ankommt.

Thema: Debugging von referenzierten DLLs
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

wenn man die dll im debug modus kompiliert und die .pdb mitkopiert ( in der bereits breakpoints gesetzt sind) kann man die breakpoints verwenden.

Frage: warum sind nur die kompilierten DLLs referenziert wenn zurgriff auf den sourcecode besteht? (den man ja braucht wenn man die breakpoints setzen will)

Thema: [erledigt] Silverlight-Zugriff auf self-hosted WCF-Service (clientaccesspolicy.xml)
Am im Forum: Netzwerktechnologien

Ok ich habe einen IErrorHandler hinzugefügt, das hat folgendes ergeben:

Fehler
{System.ServiceModel.FaultException: Die Nachricht mit Action "urn:IGameService/Add" kann aufgrund einer fehlenden ContractFilter-Übereinstimmung beim EndpointDispatcher nicht verarbeitet werden. Mögliche Ursachen: Vertragskonflikt (keine Action-Übereinstimmung zwischen Sender und Empfänger) oder ein Bindung/Sicherheit-Konflikt zwischen dem Sender und dem Empfänger. Stellen Sie sicher, dass Sender und Empfänger über den gleichen Vertrag und die gleiche Bindung verfügen (einschließlich Sicherheitsanforderungen, z. B. "Message", "Transport", "None").
bei System.ServiceModel.Dispatcher.ErrorBehavior.ThrowAndCatch(Exception e, Message message)}

Lösung des Problems war, ich habe zwei klassen für die service definition erstellt (eine zum hosten und eine zweite asyncrone für den silverlight zugriff) und bei der einen hatte ich Namespace auf "" gesetzt und bei der anderen nicht.

Thema: [erledigt] Silverlight-Zugriff auf self-hosted WCF-Service (clientaccesspolicy.xml)
Am im Forum: Netzwerktechnologien

Hallo Community,

ich möchte auf einen in einem eigenen Dienst gehosteten WCF Service in silverlight zugreifen, der service ist mit einem BasicHttp Binding gehosted. Ich habe mittlerweile herausgefunden das ich ein clientpolicy file im Root des Ports hosten. Mein problem ist jetzt wenn ich auf den Service zugreife bekomme ich ein File Not Found.

Ich habe das Ganze mit Fiddler analysiert, die clientaccesspolicy wird abgefragt allerdings gibt der server beim eigentlichen wcf aufruf einen http 500 error zurück.

PS: Ich habe gelesen man kann auch tcp bindings verwenden sofern man das clientaccesspolicy file auf http port 80 hosted, kann man irgentwie vermeiden das ganze nicht auf port 80 zu hosten?

hier mein server code:

( hier im beispiel ist rootUrl http://MICHAEL-PC:19701


    public class GameServiceHost
    {
        protected InstanceServer _server;
        protected ServiceHost _gameServiceHost;
        protected ServiceHost _accessPolicicyServiceHost;

        public GameServiceHost(InstanceServer server)
        {
            _server = server;

            ConnectionString connectionString = ConnectionString.HosingConnectionString(server.GameInstance.Name);

            string rootUrl = connectionString.GetRootUrl();
            string gameServiceUrl = connectionString.GetServerInstanceGameServiceUrl();
            
            _gameServiceHost = new ServiceHost(typeof(GameService), new Uri(rootUrl));

            // Game Service
            var binding = ServiceDefinition.GetBinding();
            _gameServiceHost.AddServiceEndpoint(typeof(IGameService), binding, connectionString.InstanceName + "/" + ConnectionString.GameServiceUri /*new Uri(serviceUrl)*/);
            _gameServiceHost.AddServiceEndpoint(typeof(IClientAccessPolicy), new WebHttpBinding(), "")
                .Behaviors.Add(new WebHttpBehavior());

            // Http Get
            var metadataBehavior = _gameServiceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();
            if (metadataBehavior == null)
            {
                metadataBehavior = new ServiceMetadataBehavior();
                _gameServiceHost.Description.Behaviors.Add(metadataBehavior);
            }

            metadataBehavior.HttpGetEnabled = true;
            metadataBehavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;

            // Debug Behavoir
            var debugBehavior = _gameServiceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
            if (debugBehavior == null)
            {
                debugBehavior = new ServiceDebugBehavior(){ };
                _gameServiceHost.Description.Behaviors.Add(debugBehavior);
            }
            debugBehavior.IncludeExceptionDetailInFaults = true;

            // Add MEX endpoint
             _gameServiceHost.AddServiceEndpoint(
              ServiceMetadataBehavior.MexContractName,
              MetadataExchangeBindings.CreateMexHttpBinding(),
              "mex"
            );
        }

        public void Start()
        {
            //_accessPolicicyServiceHost.Open();
            _gameServiceHost.Open();
        }
    }

Hier ein ausschnitt aus der ConnectionString-Klasse



        public const string GameServiceUri = "GameService";

        public const int BasePortNumber = 19000;

        /// <summary>
        /// Gets the root url for clientaccesspolicy.
        /// </summary>
        /// <returns></returns>
        public string GetRootUrl()
        {
           int portNumber = ConnectionString.BasePortNumber + PortOffset;
           return string.Format("http://{0}:{1:d}", Server, portNumber);
        }

        public string GetClientInstanceGameServiceUrl()
        {
            return GetServerInstanceGameServiceUrl();
            //return string.Format("{0}/{1}", GetServiceUrl(), GameServiceUri);
        }

        /// <summary>
        /// Gets the root url for the instance
        /// </summary>
        /// <returns></returns>
        public string GetServerInstanceUrl()
        {
            return string.Format("{0}/{1}", GetRootUrl(), InstanceName);
            //return string.Format("http://{0}:19701/instances/{1}", ServerName, InstanceName);
        }

        public string GetServerInstanceGameServiceUrl()
        {
            return string.Format("{0}/{1}", GetServerInstanceUrl(), ConnectionString.GameServiceUri);
        }


Mein Service


    public class GameService : IGameService, IClientAccessPolicy
    {
        public GameService()
        { 
        
        }

        /////////////////////////////////////////////////////////////////
        // IGameService
        /////////////////////////////////////////////////////////////////

        //[OperationContract]
        public GameDefinition GetDefinition()
        {
            return new GameDefinition()
            {
                
            };
        }

        public int Add(int a, int b)
        {
            return a + b;
        }


        public Stream GetResource(string name)
        {
            return null;
        }

        /////////////////////////////////////////////////////////////////
        // IClientAccessPolicy
        /////////////////////////////////////////////////////////////////

        [OperationBehavior]
        public Stream GetClientAccessPolicy()
        {
            if (WebOperationContext.Current != null)
                WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
            return new MemoryStream(GameService.ClientAccessPolicyBytes);
        }

        [OperationBehavior]
        public Stream GetCrossDomainPolicy()
        {
            if (WebOperationContext.Current != null)
                WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
            return new MemoryStream(GameService.CrossDomainPolicyBytes);
        }

        public static byte[] ClientAccessPolicyBytes = Encoding.UTF8.GetBytes(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers=""*"">
                <domain uri=""*""/>
            </allow-from>
            <grant-to>
                <resource path=""/"" include-subpaths=""true""/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>");

        public static byte[] CrossDomainPolicyBytes = Encoding.UTF8.GetBytes(
"<?xml version=\"1.0\"?>" +
"<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">" +
"<cross-domain-policy>" +
"<allow-http-request-headers-from domain=\"*\" headers=\"*\"/>" +
"</cross-domain-policy>");
    }

Thema: XmlSerializer: Property of type Type
Am im Forum: Datentechnologien

naja da man ja nicht weiß wie der string serialisiert werden soll (z.b mit assembly name etc.) muss man schon selber was machen, ich finde es jetzt aber nicht sooo unständlich zu serializieren:


    public class XmlSerializerTest
    {
        [XmlIgnore]
        public Type Property
        {
            get;
            set;
        }

        [XmlAttribute("Property")]
        public string PropertyString
        {
            get
            {
                return Property.FullName;
            }
            set
            {
                Property = Type.GetType(value);
            }
        }
    }

Thema: Grundlegendes DB Design Frage (Wirklich nur KundenID in Bewegungstabelle verwenden?)
Am im Forum: Datentechnologien

Naja wenn du so vorgehen würdest müsstest du deine Datensätze versionieren und zwar alle die in den Bestellschein einfließen. Grundsätzlich halte ich das aber für die Falsche Taktik da sich ja das Aussehen der Generierten Bestellscheine auch durch Änderungen an dem Programm ändern könnten

Wir haben es immer so gemacht das wir die gedruckten Bestellscheine als PDF gespeichert haben und man sie dann wieder im orginal abrufen konnte.

Thema: Add-In für VS 2010: Silverlight App als Editor-Option für spezielle Dateitypen einfügen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

naja du kannst mit Silverlight COM befehle abschicken, du kannst eine Silverlight Seite an die Taskbar heften aber ob du eine Silverlight Applikation als Editor verwenden kannst weiß ich nicht.

Was jetzt meine Idee wäre das du eine Windows Applikation erstellst die als Editor dient und intern nur deine Silverlight Page in einem Webbrowser Control aufruft.

Thema: Microsoft enthüllt neues Windows 8 User Interface
Am im Forum: Szenenews

weiß nicht ob ich eventuell der einzige bin der das glaubt aber ich hab so das gefühl das win8 ding is nicht nur für tablets.

Ich denke so in den nächsten paar jahren wird sich das so entwicklen das man diese "Media Center" Oberfläche auch auf smartphones verwenden kann. Dann wird es so sein das jeder sein smartphone hat mit dem er telefoniert und sobalt er an einen bildschirm kommt kann er sein handy anschließen und das windows darauf benutzen.

Ich meine von der hardware dürfte das bald kein problem mehr sein wenn man sieht das es jetzt schon dual core smartphones gibt.

Thema: .NET 2.0 Runtime kann zur Laufzeit die .NET 4.0 dll nicht laden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Community,

Wir haben in der Firma eine kleine scripting engine mit dem CSharp für eines unserer Produkte, die Script Engine ist auf .NET 2.0 Kompiliert

Jetzt habe ich das problem das ich für einen Script die klasse System.ServiceModel.Activities.WorkflowControlClient aus dem .NET Framework 4.0 verwenden will.

Das problem ist jetzt allerdings das die .NET 2.0 Runtime zur laufzeit die .NET 4.0 dll nicht laden kann (3.5 scheinen aber zu funktionieren, was warscheinlich mit änderungen bei 4.0 am GAC und der CLI zu tun hat oder?)

Meine frage ist nun, muss ich eine NET 4.0 Version von meiner Scripting runtime bauen damit ich auch 4.0 Libaries verwenden kann oder gibt es eine andere lösung für das problem?)

Hier mal mein testcode:


using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
using System.IO;

namespace CompilerTest
{
    class Program
    {
        public static readonly string Net4Gac = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0");

        static string[] GacDirs = new string[] 
        {
            Net4Gac,
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Reference Assemblies\Microsoft\Framework\v3.5"),
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Reference Assemblies\Microsoft\Framework\v3.0")
        };

        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

            Assembly assembly = Compile(
                codeFilePath: @"C:\Daten\Projects\Dropbox\Arbeit\CompilerTest\CompileCode\TestClass.cs",
                referencedAssemblyPaths: new string[] 
                { 
                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll"),
                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ServiceModel.Activities.dll"),
                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.ServiceModel.dll")
                });
            assembly.GetType("TestClass").GetMethod("TestMethod").Invoke(null, new object[] { });
        }

        private static Assembly Compile(string codeFilePath, params string[] referencedAssemblyPaths)
        {
            var codeProvider = new CSharpCodeProvider();
            var parameter = new CompilerParameters();
            parameter.GenerateExecutable = false;
            parameter.GenerateInMemory = true;

            foreach (string assemblyPath in referencedAssemblyPaths)
            {
                parameter.ReferencedAssemblies.Add(assemblyPath);
            }
           
            CompilerResults results = codeProvider.CompileAssemblyFromFile(parameter, codeFilePath);
            if (results.Errors.Count != 0)
            {
                throw new Exception(results.Errors[0].ErrorText);
            }

            Assembly assembly = results.CompiledAssembly;
            return assembly;
        }

        static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            var assemblyName = new AssemblyName(args.Name);

            if (assemblyName.Name == "System")
            {
                return null;
            }

            return Assembly.LoadFile(Path.Combine(Net4Gac, assemblyName.Name + ".dll"));
            //return Assembly.Load(new AssemblyName(args.Name));
            //return null;

        }
    }
}

Und hier der kompilierte Code:


using System;
using System.ServiceModel.Activities;
using System.ServiceModel;

public static class TestClass
{
    public static void TestMethod()
    {
        Console.WriteLine("Test1");
        WorkflowControlClient controlClient = new WorkflowControlClient(new BasicHttpBinding(), new EndpointAddress("http://localhost:8080"));
        Console.WriteLine("Test2");
        controlClient.Terminate(Guid.NewGuid());
    }
}


Thema: WCF Routing mit HttpGet
Am im Forum: Netzwerktechnologien

In userer Applikation hosten wir xamlx Workflows, das besondere an diesen Workflows ist jetzt allerdings das sie versionierbar sind. Für jede Version eines Workflows wird ein eigener Workflow Host geöffnet. Um die Workflows jetzt unterscheiden zu können hat jeder worklfow eine eigene Url, z.B

www.123.de/Superworkflow$1.0
www.123.de/Superworkflow$1.1
www.123.de/Superworkflow$1.2
...

Jetzt ist allerdigns natürlich der Wunsch das man den worklflow auch über

www.123.de/Superworkflow

ansteuern kann. Das ganze wurde mit einem WCF Router gelößt der wenn ein Request einen Parameter WorkflowId in der Message Enthalten ist in einer Tabelle nachschaut zu welchem Service dieser Request gehört und ihn dementsprechend weiterleitet. Wenn dieser Parameter nicht angegeben ist wir an die letze Version gerouted.
Das funktioniert auch. DAS Problem ist jetzt das holen der Metadaten per HTTPGet und Wsdl.

Wenn ich nämlich HttpGet bei dem RoutingService aktiviere bekomme ich den Fehler:
The HttpGetEnabled property of ServiceMetadataBehavior is set to true and the HttpGetUrl property is a relative address, but there is no http base address. Either supply an http base address or set HttpGetUrl to an absolute address.

HttpGetUrl kann ich nicht verwenden da sich ja die WCF Interfaces von Version zu Version unterscheiden können.

Hätte jemand eine lösung für mich?

PS: Wenn möglich würde ich außerdem auch noch gerne auf den WorkflowControlEndpoint über www.123.de/Superworkflow/wce zugreifen können der unter www.123.de/Superworkflow$1.1/wce gehostet ist. Wenn also jemand einen Tipp hat wie ich subdomains auch routen kann würde ich mich darüber freuen.

Thema: Wie setzt ihr Exceptions ein?
Am im Forum: Rund um die Programmierung

Ich werfe in jedem Fehlerfall exceptions, einzige Außnahme ist wenn ein "Fehler" mit einer hohen Warscheinlichkeit auftritt (und somit eigentlich keine Exception, zu deutsch Außnahme ist) dann mache ich zusätzlich noch eine TrySometing Methode dazu.

Vorteil von Exceptions ist dass in jedem Fall ein Fehler auftritt und nicht nur wenn derjenige der die Funktion verwendet und gründlich die doku (falls vorhanden ^^) gelesen hat. Außerdem kann man durch inner exception das ganze detailierter machen und durch den stacktrace genau feststellen wo der fehler auftrat.

Thema: wegberechnung von a nach b
Am im Forum: Rund um die Programmierung

Hast dir ja geleich mal eines der Kompliziertesten Dinge ausgesucht: Wegfindung.

Meinst jetzt welche punkte das objekt passiert hat? Dann mach doch nen Timer der alle 10 millisekuden schaut wo das objekt gerade steht und speicher dir alle punkte.

Wenn es wirklich um wegfindung geht würde ich dir mal A* Pfadfindung für Anfänger empfehlen

Thema: Fluent CodeDOM
Am im Forum: Projekte

Also habe das ganze jetzt geupdated und die neue version ist auf codeplex verfügbar.

Changes sind somit:
- Body Element nciht mehr nötig
- Alles wird jetzt anstelle von End mit EndMethod, EndIf etc. beendet
- Interne Klassenstruktur vereinfacht.

Mir ist bewusst das aller alte code der damit erstellt wurde geupdated werden muss bei 7 downloads ist das aber denke ich mal zu verkraften ^^

Das ganze sieht jetzt wie oben angekündigt so aus:


namespace FluentCodeDom.Sample1
{
    class Program
    {
        static void Main(string[] args)
        {
            CodeCompileUnit compileUnit = new FluentCodeCompileUnit()
                .Namespace("Sample1")
                    .Class("Program")
                        .Method(MemberAttributes.Public | MemberAttributes.Static, "Main").Parameter(typeof(string[]), "args")
                            .CallStatic(typeof(Console), "WriteLine", Expr.Primitive("Hello Fluent CodeDom"))
                        .EndMethod
                    .EndClass
                .EndNamespace
            .EndFluent();

            Assembly assembly = Helper.CodeDomHelper.CompileInMemory(compileUnit);
            assembly.GetType("Sample1.Program").GetMethod("Main").Invoke(null, new object[] { null });
        }
    }
}

Thema: Firefox 4 final veröffentlicht
Am im Forum: Szenenews

Kommts nur mir so vor oder sehen mitlerweile browser fast gleich aus? Man muss nur mal z.B. Google Chrome und Firefox nebeneinander stellen, viel unterschied ist da nicht mehr.

Bzw es geht zu dem trend das man nicht mehr viel vom browser sieht nur noch die webside.

Thema: [erledigt] Routine bei Programmende
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Über das Form Closing event. Ich gehe mal davon aus das du von Windows Forms redest.

Google ist dein Freund

edit: Ich entschuldige vielmals es heißt FormClosing

Thema: Fluent CodeDOM
Am im Forum: Projekte

Also ich bin grade dabei das ganze umzustellen wie im post oben gezeigt, man muss aber sagen das ganze nicht umbedingt ganz einfach da ich schon ziemlich extremes zeug mit Generics mache.
(Man kann sich ja mal den source anschauen, das ist problem ist nämlich das auch so sachen wie Ifs in Schleifen in Try Blöcken in Methoden möglich sein müssen)
und dann kommen halt mal fehlermeldungen wie die hier raus:

Fehler
Fehler 2 "FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeType <FluentCodeDom.FluentCodeClass>, FluentCodeDom.FluentCodeMethod <FluentCodeDom.FluentCodeClass>>, FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeType <FluentCodeDom.FluentCodeClass>, FluentCodeDom.FluentCodeMethod <FluentCodeDom.FluentCodeClass>>, FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeType <FluentCodeDom.FluentCodeClass>, FluentCodeDom.FluentCodeMethod <FluentCodeDom.FluentCodeClass>>.IfCodeBody>.ElseCodeBody>" enthält keine Definition für "EndIf", und es konnte keine Erweiterungsmethode "EndIf" gefunden werden, die ein erstes Argument vom Typ "FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeType <FluentCodeDom.FluentCodeClass>, FluentCodeDom.FluentCodeMethod <FluentCodeDom.FluentCodeClass>>, FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeType <FluentCodeDom.FluentCodeClass>, FluentCodeDom.FluentCodeMethod <FluentCodeDom.FluentCodeClass>>, FluentCodeDom.FluentCodeBody <FluentCodeDom.FluentCodeType <FluentCodeDom.FluentCodeClass>, FluentCodeDom.FluentCodeMethod <FluentCodeDom.FluentCodeClass>>.IfCodeBody>.ElseCodeBody>" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Daten\Projects\Dropbox\Nation Commander\FluentCodeDom\FluentCodeDom.Test\DeclarationTests.cs 66 30 FluentCodeDom.Test

Thema: Fluent CodeDOM
Am im Forum: Projekte

Also persönlich würde ich dann doch

Begin
End

bevorzugen EndBody ist mir dann doch zuviel Text

Hmm über eine VB ähnliche syntax habe ich auch schon nachgedacht und immoment muss ich doch sagen das eine syntax wie


.Method("Test").Parameter(typeof(int) "i")
      .CallStatic(typeof(Console), "WriteLine", "Test")
.EndMethod

doch auch am meisten zusagen würde und das mit dem Body weglassen könnte zwar zu ner ziemlich scheuslichen syntax führen, für den well formed code ist dann am ende der programmierer ja eh selbst verantwortlich.

Wenn man nur End Verwendet habe ich selbst schon gemerkt das man da schnell mit den Ends Durcheinander kommt. Und so schlecht schaut das dann garnicht aus


                .Namespace("Test.FluentCodeDom.Test")
                    .Import("System")
                    .Import("System.Text")

                    .Class(MemberAttributes.Public, "StringModifier")
                        .Field(typeof(int), "_intValue").EndField
                        .Property(MemberAttributes.Public, typeof(int), "IntValue")
                            .Get
                                .Return(Expr.Var("_intValue"))
                            .EndGet
                            .Set
                                .Set(Expr.Var("_intValue"), Expr.Value())
                            .EndGet
                        .EndProperty
                    .EndClass
                .EndNamespace

Thema: File-Server EXE datei versenden
Am im Forum: Netzwerktechnologien

Es wäre nett wenn du uns sagen würdest was nicht funktionert.

PS: Warum hast du bei dem code zu auslesen und senden ein Thread.Sleep(100) ?

Thema: File-Server EXE datei versenden
Am im Forum: Netzwerktechnologien

Naja der TcpListener überträgt ja Streams und z.B. File Open gibt einen Stream zurück.

Da ich aber denke das du deine Bisherige vorgehensweise beibehalten willst würde ich dir raten das ganze als BASE64 oder BASE32 zu codieren (die bytes werden als string dargestellt) das ist auch die vorgehensweise die EMails verwenden. Nachteil an der Methode ist allerdings das du dadurch ca. 30 % mehr daten zu übertragen hast.

Google einfach mal C# Base64 und lies dir eventuell den Wikipedia artikel dazu durch.

Eine Saubere lösung wäre wenn du einen FTP-Server verwenden würdest um die Dateien zu übertragen, da du aber erst mit C# anfängst und dich etwas ausprobierst kannst du aber auch ruhig bei deiner alten lösung bleiben.

Thema: Fluent CodeDOM
Am im Forum: Projekte

Danke für das Feedback, bei !!! 4 !!! downloads muss ich echt noch was tun das die libary bekannter wird

Das CallStatic vereinfachen hab ich mir auch schon gedacht denke ich werde ich einbauen.

Das Body habe ich eingebaut damit man nicht wild Parameter Rückgabetyp und Code Vermischt. Was ich aber schon länger überlege das man nur noch ein End nach einem methoden body machen soll also statt


.Method(MemberAttributes.Public | MemberAttributes.Static, "Main").Parameter(typeof(string[]), "args")
.Body
	.CallStatic(typeof(Console), "WriteLine", Expr.Primitive("Hello Fluent CodeDom"))
.End.End

nur noch schreiben muss


.Method(MemberAttributes.Public | MemberAttributes.Static, "Main").Parameter(typeof(string[]), "args")
.Body
	.CallStatic(typeof(Console), "WriteLine", Expr.Primitive("Hello Fluent CodeDom"))
.End

Man kann das Body und das End ja als scopes sehen oder wie in TSQL das BEGIN und END Statement

Thema: Fluent CodeDOM
Am im Forum: Projekte

Da ich die erstellung von Code via CodeDOM ziemlich umständlich fand und ich mal testen wollte was man mit einer .NET sprache so alles anstellen kann hab ich mal diese kleine Libary geschrieben.

Fluent CodeDOM Auf Codeplex

Würde mich freuen wenn Ihr mir ein bisschen Feedback drüber geben könntet, ist meine erste Libary die ich wirklich veröffentlicht habe.

Thema: Scriptsprache in C# Programm einbinden
Am im Forum: Rund um die Programmierung

Also du willst deine eigene Skriptsprache bauen oder wie? Weil es ist auch möglich c# code zur laufzeit zu kompilieren, weil müsstest du keine eigene schreiben. Eine alternative wäre Irony. Irony ist ein open source projekt mit dem man seine eigenen .NET sprachen definieren kann, dieses erstellt dann einen Kompiler der deine skript dateien in ausführbare exen oder dlls kompiliert

Natürlich kannst du auch deinen eigenen Parser schreiben das ist aber - sei dir versichert undglaublich komplex und zeitaufwändig. Und ich bin mir sicher es gibt auch implementierungen dafür.

Einfach mal c# skript parser googeln

Thema: CodeDOM: Alle Benötigten Assemblies eines Typs
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich habe eine Komponente geschrieben die ein beliebiges Interface bekommt und dafür per CodeDOM eine Implementierung generiert. Diese soll dann im Memory kompiliert werden.

Jetzt ist es aber wenn ich das ganze kompilieren will muss ich ja die benötigten Assembly.Locations in ReferencedAssemblies mitgeben. Es reicht jetzt allerdings nicht nur die Assembly des Interfaces mitzugeben sondern ich muss ja auch noch Rekursiv die Assembly Locations der Referenzierten Assemblies mitgeben und die Referenzierten Assemblies der Referenzierten Assemblies...

Wenn ich jetzt aber bei der Assembly des Interfaces GetReferencedAssemblies() calle bekommen ich nur AssemblyName objekte zurück.
Um deren Location bzw deren Assembly zu ermitteln muss ich das teure Assembly.Load() aufrufen. Dann muss ich außerdem noch darauf achten dass eine Assembly gar keine Location haben könnte da sie im memory generiert wurde usw...

Kurzum das ganze wurde Programmiertechnisch ein ziemlich aufwand werden der auch noch ziemlich Fehleranfällig wäre. Außerdem würde diese ermittlung viel zu lange dauern.

Jetzt wollte ich fragen ob jemand weiß wie das die .NET klassen wie der XmlSerializer oder WCF machen die ja Codegenerierung benutzen.

Andernfalls würde ich die Generierung mit Reflection.Emit und DynamischenAssemblies machen, bei welchem erstens die erstell dauer nicht so lang ist (Da kein Kompilieren) und zweitens ich keine Assemblies angeben muss. Und soo viel schwerer als CodeDOM ist MSIL auch nicht ^^.

Edit: Ok Assembly.GetAssemblies() gibt ja alle derzeit geladenen Assemblies zurück, das lößt mein problem eignetlich.

Thema: Reflection IsByRef in .NET 3.5
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Achso - tja ok es war spät, hab nicht ganz überrissen das der Type ja ByRef ist und nicht die ParameterInfo ^^

Thema: Reflection IsByRef in .NET 3.5
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich bin imo an einem dieser rückständigen NET 3.5 Projekten dran und würde gerne wissen ob es irgentwie möglich ist per Reflection herauszufinden ob ein Parameter ByReference ist. In .NET 4.0 gibt es ja die schöne Property IsByRef, in 3.5 nicht. Kennt jemand ne Lösung?

Hier mal Code den ich mir dazu aus dem MSDN geholt habe (paar ändernungen gemacht das es funktionert, der Macher gehört erschlagen)
Link:


        public static void mymethod(string str1, out string str2, ref string str3)
        {
            str2 = "string";
        }

        public static void Test(string[] args)
        {
            Console.WriteLine("\nReflection.ParameterAttributes");

            // Get the Type and the method.

            Type Mytype = typeof(paramatt);
            MethodBase Mymethodbase = Mytype.GetMethod("mymethod");

            // Display the method.
            Console.Write("\nMymethodbase = " + Mymethodbase);

            // Get the ParameterInfo array.
            ParameterInfo[] Myarray = Mymethodbase.GetParameters();
            foreach (ParameterInfo param in Myarray)
            {
                // Get and display the attributes for the second parameter.
                ParameterAttributes Myparamattributes = param.Attributes;

                Console.WriteLine("\nFor the second parameter:\nMyparamattributes = "
                    + (int)Myparamattributes
                    + ", which is an "
                    + Myparamattributes.ToString());
            }
        }

Thema: Reflection MemberInfo Objekt Single Instance?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Also ich bin immoment an einem Projekt das sehr viel mit Reflection und Custom Attributes arbeitet. jetzt will ich aber das man den Typen, den Properties und den Methoden auch per code zur laufzeit ein attribut zuweisen kann.

Dazu habe ich mir ein Dictionary<ICustomAttributeProvider, List<object>> gemacht in dem ich mir alle zusätzlichen Attribute speichere. Nur zur Info ICustomAttributeProvider wird von der MemberInfo Klasse implementiert von der unter anderem Type, PropertyInfo, FieldInfo und MethodInfo erben.

Da ich das ganze in ein dictionary speichere werden die objekte anhand der Objektreferenz identifiziert. Jetzt wollte ich nur nochmal sicherheitshalber fragen: Von Type weiß ich das es von jedem Type objekt nur eine instanz gibt, ist das mit MethodInfo, PropertyInfo und FieldInfo genauso?

Thema: Ogre vs. Irrlicht vs. ???
Am im Forum: Grafik und Sound

ich entschuldige mich für diese aussage

Ich bin lediglich der meinung das die bei Ogre standardmäßig mitgelieferten Standard deutlich besser aussehen als wenn man jetzt die standard Irrlicht schader verwendet. Als Beispiel seien Wasser und Lichteffekte genannt.