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 Repac3r
Thema: Wie update ich am besten einen existierenden Docker-Container?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Schönen morgen euch,

ich spiele seit einer weile mit .NET Core und Docker rum.
Mittlerweile habe ich meine Infrastruktur so eingerichtet, dass nach erfolgreichen Durchlauf meines Master-Builds ein neuer Docker-Container erstellt wird, welcher meine Anwendung und die nötigen Ressourcen beinhaltet.

Meine Test-Anwendung verwendet für die persistenz eine MongoDB-Instanz.
Nun stellt sich für mich die Frage, wie ich am besten existierende Docker-Container update?

Mein Vorschlag sieht wie folgt aus:
- Die MongoDB speichert seine Daten außerhalb des Docker-Containers ab (Host-System)
- Ich stoppe den existierenden Container, lösche und starte den neuen Container
- Der neue Container verweißt ebenso auf den DB-Ordner im Host-System.

Ist das ein valider Weg?

Thema: [erledigt]Mit Jenkins zu einem GIT-Repo verbinden?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Schönen Mittag euch,

ich versuche gerade mittels Jenkins mir ein neues Buildprojekt anzulegen. Leider hapert es schon am VCS.

Unter Jenkins habe ich folgende Plugins installiert:

  • Git client plugin (1.19.2)
  • Git plugin (2.4.1)


Mein Repo-Url sieht wie folgt aus:
https://[email protected]/MarcelHoffmann/jenkins-build-test.git

So, versuche ich nun, über Jenkins mich mit diesem Repo zu verbinden, bekomme ich folgende Fehlermeldung:
Fehler
Failed to connect to repository : Could not init C:\Windows\TEMP\hudson8429009242105104933tmp

Habt ihr vlt eine Idee, woran dass liegen kann?


Grüße

//Edit: Mein Fehler, der Default-Pfad zu GIT war falsch gesetzt.

Thema: [Design Patterns] Factory Method vs. Simple Factory
Am im Forum: Rund um die Programmierung

Schönen Morgen euch,

vielen Dank für die ganzen Anregungen. Eure Tipps werde ich das nächste mal beachten.
Doch wann eine Simple Factory und wann eine Factory Method angebracht ist, habe ich erst durch From No Factory to Factory Method richtig verstanden.


Grüße

Thema: [Design Patterns] Factory Method vs. Simple Factory
Am im Forum: Rund um die Programmierung

Schönen Mittag euch,

derzeit beschäftige ich mich intensiv mit Design Patterns.

Nun hat sich herausgestellt, dass viele Entwickler die "Simple Factory" mit der "Factory Method" verwechseln.


Hier mal kurz zwei Beispiele (Achtung, ich bin unkreativ :P):

Meine "Entities"


public interface IFruit 
{
	Color Color { get; set; }
	double Weight { get; set; }
	void Eat();
}

public class Apple: IFruit 
{
	public Color Color { get; set; }
	public double Weight { get; set; }
	
	public Apple()
	{
		Color = Color.Red;
		Weigth = 125;
	}
	
	public void Eat()
	{
		//Implementation
	}
}

public class Banana: IFruit 
{
	public Color Color { get; set; }
	public double Weight { get; set; }
	
	public Apple()
	{
		Color = Color.Yellow;
		Weigth = 200;
	}
	
	public void Eat()
	{
		//Implementation
	}
}

Simple Factory


public class FruitFactory 
{
	public static IFruit Create(FruitType type)
	{
		switch(type)
		{
			case FruitType.Apple:
				return new Apple();
			case FruitType.Banana:
				return new Banana();
			default:
				return null;
		}
	}
}

Method Factory


public abstract class FruitFactory 
{
	public IFruit Create()
	{
		var fruit = CreateFruit();
		
		//Mache irgendwas mit dem Objekt, ist aber nicht zwingend...
		fruit.Eat();
		
		return fruit;
	}

	protected abstract IFruit CreateFruit();
}

public class AppleFactory: FruitFactory
{
	protected override IFruit CreateFruit()
	{
		return new Apple();
	}
}

public class BananaFactory: FruitFactory
{
	protected override IFruit CreateFruit()
	{
		return new Banana();
	}
}

So, nun zu meiner Frage:

Wo genau liegt denn der Vorteil bei der Factory Method. Laut meinen Recherchen wird die Factory Method ziemlich oft verwendet.
Für mich ist diese jedoch von der Benutzung her, aufwendiger als die Simple Factory.

Bei der Simple Factory übergebe ich einfach meinen Typ, habe mein konkretes Objekt, fertig.
Bei der Factory Method jedoch, muss ich erst eine konkrete Factory(Apple/Banana-Factory) einer Basis-Factory(Fruit Factory) zuweisen und kann nicht elegant mit einem Enum meine gewünschte konkrete Frucht bekommen.

Soweit ich das verstanden habe, gibt es folgende Vorteile der Factory Method:
  • Ich entkoppel die Klienten(Aufrufer der Factory) von einer konkreten Implementierung
  • Die Basis-Factory selbst kennt ebenfalls keine konkrete Typen
  • Ich kann neue Features hinzufügen, ohne bestehenden Quellcode zu verändern (Stichwort Open/Closed Principle, was meiner Meinung nach, die Simple Factory eben nicht kann)

Thema: CSV Parser - Ist ein Record verteilt auf mehrere Zeilen
Am im Forum: Code-Reviews

Schönen Abend euch,

es gab einen kleineren Bug in unserem CSV-Parser. Es kann relativ schlecht mit Daten umgehen, sobald ein Record sich über mehrere Zeilen verteilt.
Das Problem habe ich gelöst, nur bin ich mir der Umsetzung nicht zufrieden. Für mich sieht es einfach "dirty" aus. Vlt. hat ein erfahrerener Programmierer einen besseren Ansatz, wäre jedenfalls sehr dankbar.

So, nun zur Erklärung, es gibt Folgendes (nur ein Beispiel):

  • TextBegrenzer (im Code = FieldBeginsWith & FieldEndsWith = "
  • FeldBegrenzer (im Code = FieldSeparators = |


Die Werte die mir mit TextSourceDescription übergeben worden, sind leider vorgegeben und können nicht geändert werden.

Ich muss jetzt folgende Fälle parsen können:

Fall1:
"ID"|"Name"
"0"|"Marcel"

-> Einzeiliger Record

Fall 2:
ID|Name
0|Marcel

-> Einzeiliger Record

Fall3:

"ID"|Name         <- (kann auch anders herum sein)
"0"|Marcel

-> Einzeilige Record

Fall4:

"ID"|"Name"
"0"|"Ein sehr
langer name"

-> Merhzeiliger Record

Fall5:

"ID"|"Name"
"0"|"Ein sehr
\"langer\" name"

-> Merhzeiliger Record

Das sind die Fälle die ich abdecken muss.

Was mein Algorithmus macht, ist einfach erklärt:
Ist das letzte Zeichen ein Textbegrenzer? - Wenn Nein, möglicher MultiLine-Record
Fängt das letzte Feld mit einem Feldbegrenzer und einem Textbegrenzer an? - Klare Sache, ist ein MutliLine-Record.


Hier mal der Code:


        private bool IsMultiLineColumn(string line, TextSourceDescription description)
        {
            var reversedLine = string.Join("", line.Reverse());
            var beginsWithFieldAndTextSeparator = false;

            //If the last character of the current row is a text separator, the record isn't multiline
            if (reversedLine.First() == description.FieldsEndWith)
            {
                return false;
            }

            for (var index = 0; index < line.Length; index++)
            {
                //Checks if the current record ends with a text separator
                if (reversedLine[index] != description.FieldsBeginWith)
                {
                    continue;
                }

                //If the current field is the first field of this record, we're not able to check, if the first character is a field separator, 
                //because the first field does not contains a field separator at the first position
                if (index ≥ reversedLine.Length)
                {
                    beginsWithFieldAndTextSeparator = true;
                }
                else
                {
                    //Checks if the field doesn't start with a text separator and a field separator
                    if (!description.FieldSeparators.Any(fieldSeparator => reversedLine.Length ≥ index + fieldSeparator.Length 
                        && reversedLine.IndexOf(fieldSeparator, StringComparison.InvariantCulture) == index + 1))
                    {
                        continue;
                    }

                    beginsWithFieldAndTextSeparator = true;
                    break;
                }
            }

            return beginsWithFieldAndTextSeparator;
        }

Thema: [gelöst] Entity Framework DbSet wirft "NullReferenceException"
Am im Forum: Grundlagen von C#

Zitat von Abt
Wir haben leider keine Glaskugel.
Wenn Du nicht sagen willst, was genau null ist und was Zeile 93 ist, dann können wir Dich leider nur auf die NullReference-Seite des Forums verweisen, wie es MrSparkle gemacht hat.

Ich habe doch ganz genau gesagt, was die Zeile 93 ist? Ich selbst weiß nichteinmal was null ist, jede von mir erstelle Variable ist nicht null! Ich greife lediglich auf das DbSet zu, welches ebenfalls nicht null ist. Wie schon gesagt, die Exception kommt von Entity Framework, wie man es aus dem Stracktrace entnehmen kann.

Hiernochmal, dass ist die besagte Zeile 93:


        public virtual void Add(TEntity entity)
        {
            _entites.Add(entity);
        }

Diese hat der Moderator mr.sparkle aus mir nicht bekannten Gründen entfernt. Das ganze Konstrukt wir hier initalisiert:


      private readonly MysqlContext _context;
        private IDbSet<TEntity> _entites;

        public GenericRepository(MysqlContext context)
        {
            _context = context;
            _entites = _context.Set<TEntity>();
        }

Grüße

//Edit:
Scheinbar hatte die Version des Mysql-Providers welche ich nutze, ein Bug o.ä. Nach dem ich über Nuget die aktuelles assembly mir zog, lief alles ohne eine Exception durch. Trotzdem danke ;)

Thema: [gelöst] Entity Framework DbSet wirft "NullReferenceException"
Am im Forum: Grundlagen von C#

Zitat von MrSparkle
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Ich verstehe aber nicht, warum das im Zusammenhang des Entity-Frameworks auftaucht.
Selbst wenn ich direkt auf das DbSet im DbContextx zugreife, welches nicht Null ist, bekomme ich diesen Fehler. Denn alle Variablen auf die ich zugreife sind nicht null, laut Stacktrace scheint der Fehler von dem EntityFramework zu kommen, nicht von meinem Code, deswegen frage ich um Lösung.

Thema: [gelöst] Entity Framework DbSet wirft "NullReferenceException"
Am im Forum: Grundlagen von C#

Das ganze wird im Konstruktor wie folgt initialisiert:


        private readonly MysqlContext _context;
        private IDbSet<TEntity> _entites;

        public GenericRepository(MysqlContext context)
        {
            _context = context;
            _entites = _context.Set<TEntity>();
        }

Die Klasse "MysqlContext" kann man sich oben, in meinem ersten Post ansehen.


Grüße

Thema: [gelöst] Entity Framework DbSet wirft "NullReferenceException"
Am im Forum: Grundlagen von C#

Zitat von Abt
Was sagt Dein Debugger genau, was Null ist?
Sollte doch im Stacktrace drinne stehen, nämlich:

 bei MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection)

Jedoch, bekomme ich keine Fehlermeldung, wenn ich mittels:


 Database.Connection.Open();

die Verbindung öffne, im Log des Mysql-Servers kann ich auch erkennen, dass ich gerade mit der Datenbank mich verbunden habe.

Thema: [gelöst] Entity Framework DbSet wirft "NullReferenceException"
Am im Forum: Grundlagen von C#

Zitat von Abt
Dein DbSet heisst Tests und nicht Test.

Auch das habe ich schon umbenannt, bekomme jedoch den gleichen Fehler.

Thema: [gelöst] Entity Framework DbSet wirft "NullReferenceException"
Am im Forum: Grundlagen von C#

Schönen Mittag euch,

ich versuche gerade, mittels dem Entity Framework mich auf meine Mysql-DB zu verbinden und ein paar Beispiel-Werte abzulegen.

Mit der Datenbank selbst kann ich mich mitlerweile verbinden. Sobald ich jedoch versuche, auf die DbSet-Property zuzugreifen, bekomme ich eine Null-Reference-Exception.

Hier mal ein Ausschnitt aus meiner App.config:


 <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  
  <connectionStrings>
    <add name="MysqlDefaultConnection" connectionString="server=localhost;user id=***;password=***;database=***" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
  
  <entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

Hier mein DbContext (zum Testen, habe ich auf die schnelle das Entity in der gleichen Datei implementiert):


 public class MysqlContext: DbContext
    {
        public DbSet<Test> Tests { get; set; }

        public MysqlContext(): base("MysqlDefaultConnection")
        {
            Database.Connection.Open();
        }
            
    }

    [Table("test")]
    public class Test
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }

Die Tabellen-Beschreibung sieht so aus:

CREATE TABLE `test` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(45) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Mittels:


var context = new MysqlContext();
var testRepo = new GenericRepository<Test>(context);
testRepo.Add(new Test { Name = "Test" });

initialisiere ich die Datenbank und das Repository, welches auf das dazugehörige DbSet zugreift. Sobald ich hier jedoch versuche, das Entity hinzuzufügen, bekomme ich die besagte Exception:

Fehler
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

bei MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection connection)
bei System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
bei System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
bei System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple`3 k)
bei System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
bei System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection)
bei System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
bei System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
bei System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
bei System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
bei System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
bei System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
bei System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
bei System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
bei System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
bei System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
bei System.Data.Entity.DbSet`1.Add(TEntity entity)
bei **ProjectName**.DataAccess.Implementation.GenericRepository`1.Add(TEntity entity) in C:\Users\**DesktopUser**\Documents\Visual Studio 2015\Projects\**ProjectName**\**ProjectName**.DataAccess.Implementation\GenericRepository.cs:Zeile 93.
bei **ProjectName**.Application.Program.RegisterDependencies(IDependencyResolver resovler) in C:\Users\**DesktopUser**\Documents\Visual Studio 2015\Projects\**ProjectName**\**ProjectName**.Application\Program.cs:Zeile 27.
bei **ProjectName**.Application.Program.Main(String[] args) in C:\Users\**DesktopUser**\Documents\Visual Studio 2015\Projects\**ProjectName**\**ProjectName**.Application\Program.cs:Zeile 15.
bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()



Hat jemand "auf die schnelle" eine Idee, was genau mein Fehler ist und was ich daran zuändern habe? Wäre euch sehr dankbar.



Grüße...

Thema: [gelöst] MEF kann meine Plugins nicht instanziieren
Am im Forum: Rund um die Programmierung

Okay, habe es selber gefunden...
Problem liegt daran, dass beide Seiten IFetchService selbst definieren, was natürlich ziemlich blöde ist, wenn einer der beiden Seiten beschließt eine Änderung an diesem Interface zu tätigen.
Habe jetzt dieses Interface in eine eigene Library verfrachtet und lasse dieses von beiden Seiten (Application und Plugin) referenzieren. Mein Plugin wird jetzt auch instanziiert.

Vielen Dank trotzdem ;)

Thema: [gelöst] MEF kann meine Plugins nicht instanziieren
Am im Forum: Rund um die Programmierung

Schönen morgen euch,

Ich habe mir ein wirklich simples Plugin-System gebastelt, mit diesem ich meine Anwendung minimal erweitern möchte, dass ganze realisieren ich mit Hilfe von MEF.

In meiner Klasse (Plugin-Manager) werden im Konstruktor alle vorhandenen Plugins geladen und instanziiert, jedenfalls sollten diese das...

Im AggregateCatalog kann ich genau erkennen, das ein Plugin geladen wurde und in der "Part"-Property enthalten ist. Sobald aber der CompositionContainer versucht, dieses Plugin zu laden, passiert genau nichts, meine Plugin-Liste bleibt leer. Selbst eine Fehlermeldung bekomme ich hier nicht.

Hier mal ein Auszug, meines Codes:

Der Plugin-Manager


  [ImportMany(typeof(IFetchService))]
    private IEnumerable<IFetchService> _pluginList;
    private AggregateCatalog _pluginCatalog;
    private const string pluginPathKey = "PluginPath";
    ...

    public PluginManager(ApplicationContext context)
    {
        var dirCatalog = new DirectoryCatalog(ConfigurationManager.AppSettings[pluginPathKey]);
        //Here's my plugin listed...
        _pluginCatalog = new AggregateCatalog(dirCatalog);

        var compositionContainer = new CompositionContainer(_pluginCatalog);
        compositionContainer.ComposeParts(this);
     }
     ...


Hier das eigentliche Plugin:


[Export(typeof(IFetchService))]
public class MySamplePlugin : IFetchService
{
    public MySamplePlugin()
    {
        Console.WriteLine("Plugin entered");
    }
    ...
}

Hat jemand eine Idee, was ich falsch mache?



Grüße

Thema: Rechteverwaltung in einem Pluginsystem
Am im Forum: Rund um die Programmierung

Was ich haben möchte, zumindest wie ich es mir Vorstelle ist folgendes:
Jedes Plugin stellt einen eigenen User dar. Jeder dieser User darf nur auf für ihn erlaubte Bereiche (Klassen) zugreifen.

Als Technologie verwende ich Asp.Net, jedenfalls den Web Api Teil. Die Schnittstellen werden über einen JS-Client aufgerufen. Die Plugins selbst stellen aber keine grafischen Erweiterungen dar, lediglich funktionelle. Dabei geht es konkret um dieses Situation:
Das ganze stellt einen Downloader dar. So, die Grundfunktion, nämlich das Downloaden ist implementiert. Nun möchte ein User ein Plugin erstellen, mit diesem gedownloadete Daten entpacket werden. Dieses Plugin stellt eine reine Funktion dar, keine Grafik. Um zu wissen, welche Daten das Plugin entpacken soll, muss dieses auf irgendwas wie einen Download-Manager zugreifen. Dieser Download-Manager wäre z.B eine solche Komponente bei dieser ich die Rechte definieren möchte. Ich als User will nicht, das bestimmte Plugins auf diesen Download-Manager zugreifen können. Prinzipiell hat aber jedes Plugin die Möglichkeit dazu, denn alle Abhängigkeiten werden über einen DI-Container aufgelöst.
Deswegen halte ich die Rechteverwaltung während dem auflösen von Komponenten im DI-Container am sinnvolsten.

Plugins werden von Anfang an geladen, da es für mich keinen Sinn macht, Plugins erst dann zu läden, wenn z.B.: ein bestimmtes Event aufgerufen wird. Zudem gibt es sicher auch Situationen, in diesen es sinnvoll ist, direkt am Programmstart bereit zu sein.


Grüße

Thema: Rechteverwaltung in einem Pluginsystem
Am im Forum: Rund um die Programmierung

Schönen Morgen euch,

icb benötige einen guten, aber vorallem sicheren Ansatz, mit diesem ich Rechte für einzelne Plugins setzen kann.

Das Pluginsystem habe ich schon auf Basis von MEF entwickelt. Plugins werden mittels einen Dependency Container mit einer "API" versorgt.
Nun habe ich mir überlegt, wie man am effektivsten dort eine Rechteverwaltung implementieren könnte.

Ich dachte mir, dass ich innerhalb des Dependency Containers, während dem Resolven folgende Dinge tuhe:

  • Nennen wir es mal "PermissionAttribute" aus der Klasse entnehmen, welche das Plugin gerne resolved haben möchte
  • Rechte des Plugins mittels einer PluginId aus einer Datenbank abhohlen
  • Vergleichen, ob die Rechte im Attribute mit den Rechten des Plugins übereinstimmen
  • Wenn Rechte korrekt sind, wird das Objekt zurück gegeben, ansonsten wirft der Container eine Exception o.ä


So in etwa würde ich mir das vorstellen. Einen kleinen Prototyp habe ich auch schon entwickelt, funktioniert auch, soweit ich das jedenfalls erkennen kann.
Meine eigentliche Frage ist, gibt es bessere Methoden, soetwas zu realisieren?


Grüße

Thema: Regex performance in mehreren Threads
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das Problem ist ja, dass ich in meinem oben genannten Beispiel schon den Regex als Instanz benutze.

Grüße

Thema: Visual Studio - Fehler beim erstellen eines ASP.Net Projekts
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von gh0st93
Versuch mal eine leere Soulution zu erstellen und dann ein neues Projekt hinzufügen.
Ansonsten VS Deinstallieren und neu Installieren.
Hatte das Problem auch mal andere hast sich bei mir von selbst erledigt.

Danke, hat leider beides nichts gebracht. Dann bleibt mir wohl garnichts anderes übrig, als das ganze neu zu installieren.

Trotzdem danke an alle.

//Edit: Habe das ganze mehrmals neu installiert, mit diversen Versionen (2013) variiert, aber jedes mal bekomme ich diesen Fehler.

Grüße

Thema: Regex performance in mehreren Threads
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Schönen Nachmittage euch,

zurzeit versuche ich herauszufinden, wie man Regex-Abfragen über mehrere Threads optimieren könnte. Alle Pattern werden dynamisch zur Laufzeit generiert. Dabei greifen mehrere Threads auf diese Regeln zu. Mir ist dabei aufgefallen, das die Performance in mehreren Threads sinkt.

Folgende Werte habe ich bei einer Analyse herausbekommen:


(Maximale Zeiten von ForEach/ParallelForeach 100000 Werten)

Regex in mehreren Threads:
Insanzieren eines Regex-Objekts: 125ms
Match einer Regel: 130ms
Kompletter Durchgang (Instanz + Match): 170ms
-----------------------------------------------------------------

Regex in einem Thread :
Insanzieren eines Regex-Objekts: 20ms
Match einer Regel: 26ms
Kompletter Durchgang (Instanz + Match): 26ms

Daraufhin habe ich mir mal die Regex-Klassen genauer angeschaut. Laut meiner Interpretation sperrt die Regex-Klasse andere Threads, sobald sie mit ihrer Cache interagiert.
Gibt es eine Möglichkeit, diesen Cache zu deaktivieren?

Gibt es eventuell andere Möglichkeiten, wie eine andere Regex-Engine?




Grüße

Thema: Visual Studio - Fehler beim erstellen eines ASP.Net Projekts
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Abt
VS Updates installieren.

Ist aktuell mit Update 5


Grüße

Thema: Visual Studio - Fehler beim erstellen eines ASP.Net Projekts
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Schönen Abend euch,

sobald ich versuche ein leeres Asp.Net Projekt zu erstellen, bekomme ich immer einen Laufzeitfehler:

Fehler
Ein Aufrufziel hat einen Ausnahmefehler verursacht.

Diese Meldung bekomme ich beim Anlegen eines leeren Projektes, egal ob ich Web Api, oder MVC auswähle. In beiden Fällen ist meine Projektmappe unvollständig und es fehlen relevante Klassen, bzw. Dateien.
Sobald ich aber ein Projekt mir erstelle, welches bereits eine Beispielanwendung beinhaltet, bekomme ich diesen Fehler nicht, auch die Projektmappe ist vollständig.

Versucht habe ich es schon mit einer Reparatur über den Installer, hat leider nichts geholfen.

Hat jemand eine Idee, was ich noch machen könnte (ausgenommen einer neu installation)?


Grüße

Thema: Was muss ein guter .Net Entwickler alles können?
Am im Forum: Smalltalk

Schönen Mittag euch,

nun ich frage mich, was ein guter .Net Entwickler alles können muss, um sich behaupten zu können.
Wenn ich aktuelle Stellenangebote durchlese und meine Erfahrung (sehr wenig, da Azubi) zusammenfasse, komme ich auf folgende Punkte:

  • sehr gute C# oder VB Kenntnisse
  • linq, lambda, reflection etc
  • Patterns, Best Practices, Guidlines, Architektur, Software Design
  • ASP.Net, Angular, evtl. Typescript, evtl. Azure
  • Umgang mit VS und oft genutze Plugins (resharper, dotcover, nuget, etc.)
  • WinForms und WPF
  • Projektplanung


Das ist so das grobe, was mir auf die schnelle Einfällt. Gibt es von eurer Seite sonst noch etwas, was evtl. hilfreich sein könnte, als erfolgreicher .Net Entwickler?


Grüße

Thema: [erledigt] Liste aller Dateien und Ordner mittels WebRequest von einem FTP-Server abrufen
Am im Forum: Netzwerktechnologien

Zitat von vbprogger
Directory-Einträge fangen mit d an ;), z.B.

drw-rw-rw- ...

Wenn du z.B. durch die lines steppst und if (line.StartsWith("d")) abfragst, kannst du die Directories heraus filtern.

Danke, ist mir vorhin auch aufgefallen. Hier mal der Code, funktioniert für mich soweit:


        /// <summary>
        /// Parsing a chmod based string into a <see cref="FtpFileItemEntity"/>
        /// </summary>
        /// <param name="line">Line to parse</param>
        /// <returns>Returns a <see cref="FtpFileItemEntity"/></returns>
        private FtpFileItemEntity ParseChmodString(string line)
        {
            var result = new FtpFileItemEntity();
            var items = line.Split(new [] {" "}, StringSplitOptions.RemoveEmptyEntries);

             //Based on this string: "drwxr-xr-x 1 ftp ftp 0 Apr 13 13:02 testFolder"
             //The first character says, that the item is a file or a directory. 
             //If the first character is "d" it is a directory, in case of the character "-" it is a file.
            result.IsFile = !items[0].StartsWith("d");

            long size;
            //The third item contains the file size
            if (long.TryParse(items[4], out size))
            {
                result.Filesize = size;
            }

            //The eighth item contains the name of the specfic file
            result.Filename = items[8];

            return result;
        }

Thema: [erledigt] Liste aller Dateien und Ordner mittels WebRequest von einem FTP-Server abrufen
Am im Forum: Netzwerktechnologien

Schöen Mittag euch,

für ein Webinterface benötige ich einen Service mit diesem es möglich ist, durch einen FTP-Server zu navigieren. Dies stellt ansich kein Problem dar. Doch wie kann ich unterscheiden, ob es sich um eine Datei oder einen Ordner handelt?


        public IEnumerable<string> GetAllFiles(FtpConnectionEntity settings)
        {
            var request = (FtpWebRequest) WebRequest.Create(settings.FileUri);
            request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;

            if (!string.IsNullOrEmpty(settings.Username))
            {
                request.Credentials = new NetworkCredential(settings.Username, settings.Password);
            }

            using (var response = (FtpWebResponse)request.GetResponse())
            {

                using (var streamReader = new StreamReader(response.GetResponseStream()))
                {
                    return streamReader.ReadToEnd().Split(new [] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries);
                }
            }
        }

Hiermit bekomme ich alle Ordner und Dateien aufgelistet schön und gut, doch was ist jetzt was? Es kann ja vorkommen, dass Ordner einen Punkt beinhalten und somit als Datei behandelt werden, sobald ich auf eine Extensions überprüfe.

Wäre nett, wenn mir jemand mal kurz einen Denkanstoß geben könnte ;)

//Edit: Eine Möglichkeit wäre, die Dateigröße abzufragen, kommt es zu einer Exception handelt es sich um einen Ordner. Dies finde ich aber sehr unsauber und möchte ich eher nicht in meinem Code stehe haben.

Thema: [Erledigt] Async & Await richtig verwenden?
Am im Forum: Rund um die Programmierung

Okay, ich danke dir. Dass Exception-Handling fehlt ist mir klar, wollte nur auf das wesentliche eingehen.

Das Thema mit "Task.Run()" innerhalb einer Bibliothek meine ich, irgendwo mal auf Stackoverflow aufgeschnappt zu haben, werde mal schauen, ob ich das noch einmal finde.



Grüße Marcel

Thema: [Erledigt] Async & Await richtig verwenden?
Am im Forum: Rund um die Programmierung

Schönen Morgen euch,

eigentlich habe ich gedacht, dass ich das Prinzip von async und await verstanden habe, jedoch stoße ich immer wieder auf Blogs, die mir das Gegenteil behaupten. Nun brauche ich einen Rat.

Nehmen wir an, ich habe eine Methode, welche einen langen Prozess abarbeitet. Diese Methode nennen wir mal "DoWork()". Dieses Methode implementiert nicht async oder ähnliches. Ist es sinnvoll für diese Methode jetzt einen asynchronen Wrapper zu basteln, also so etwas wie:


public async Task DoWorkAsync()
{
    await Task.Run(()=> DoWork());
}

Wenn ich diese Methode aufrufe, wird ja nur die Methode "DoWork" in einem anderen Task ausgehürt, meiner Meinung nach, ist das eher parallel anstatt asynchron. So nach dem Motto: "Aus den Augen, aus dem Sinn".

Ist so etwas legitim, oder völliger Quatsch? Ich habe zudem mehrmals gelesen, dass man es möglichst vermeiden sollte, in einer Klassenbibliothek "Task.Run" zu benutzen, warum? Wie sonst, sollte ich dann diesen Wrapper implementieren?

Wie implementiert ihr asynchrone Funktionsaufrufe von "eigenen" Funktionen?

Thema: Client auf mehreren VM's gleichzeitig kontrolliert laufen lassen?
Am im Forum: Rund um die Programmierung

Schönen Mittag euch,

ich haben eine App bestehend aus einem Client und einem Server entwickelt. Nun möchte ich das ganze testen. Es sollen automatisiert mehrere Client auf den Server sich verbinden und dabei unterschiedliche Dinge tun. Damit möchte ich testen, ob der Server in der Lage ist, performant mehrere Clients gleichzeitig zu bedienen. Wie könnte ich sowas am besten umsetzen?
Meine Integration-Tests testen teilweise schon auf mehreren Threads, jedoch möchte ich gerne reale Umstände haben. Heißt: Client soll sich anmelden und darauf irgendeine Aktion durchführen, dies soll am besten mehrmals gleichzeitig mit mehreren Client geschehen.
Dies soll am besten in einer VM geschehen, auf dieser ich irgendein Script installiere, welche das ganze ausführt. Gibt es da schon eine Fertig-Lösung?

Grüße Marcel

Thema: [Visual Studio] Post Build Event: XCopy koppiert keine Dateien
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Okay, die Slahses werde ich heute Abend mal ändern.

Zitat von Abt
Setz doch einfach eine Referenz auf die Exe und stell die Build-Eigenschaften auf "Copy always".

Was genau meinst du damit, könntest du das mal kurz erklären?




Grüße Marcel

Thema: [Visual Studio] Post Build Event: XCopy koppiert keine Dateien
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Schönen guten Morgen euch,

ich versuche derzeit ein Post-Build-Ereignis zu einzurichten.
Habe es jetzt auch geschafft, zu kompilieren, ohne einen Fehler zu bekommen.
Jedoch wird meine Quelldatei nicht in das gewünschte Verzeichnis koppiert. Laut dem Log von VS wird diese auch nicht koppiert, 0 Dateien koppiert bekomme ich als Ausgabe. Verstehe aber nicht ganz wo das Problem ist.

Folgende Dinge möchte ich erreichen:
1. Ausgabe-Ordner in einem übergeordneten Ordner (2 Level zurück) namens Build einrichten. Das klappt auch ganz gut.
2. Mittels XCopy die kompilierte Anwendung von build nach bin koppieren und umbenennen. Der bin-Ordner ist im gleichen Leven wie das Build-Verzeichnis.

Mein Build-Ordner navigiere ich hiermit an:

$(SolutionDir)../../build/$(ProjectName)

Die Datei versuche ich mittels diesen Befehlen zu koppieren:
xcopy "$(SolutionDir)../../build/$(ProjectName)/$(TargetFileName)" "$(SolutionDir)../../bin/AutoCopy-Server.exe*"

Hier mal die Ausgabe des Compilers:

1>------ Erstellen gestartet: Projekt: AutoCopy.Application, Konfiguration: Debug Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(357,5): warning MSB8004: Output Directory does not end with a trailing slash.  This build instance will add the slash as it is required to allow proper evaluation of the Output Directory.
1>  AutoCopy.Application.vcxproj -> C:\Users\****\Desktop\AutoCopy\src\Server\../../build/AutoCopy.Application\AutoCopy.Application.exe
1>  0 Datei(en) kopiert
========== Erstellen: 1 erfolgreich, 0 fehlerhaft, 0 aktuell, 0 übersprungen ==========


Hat jemand eine Idee, was mein Fehler sein könnte?


Grüße Marcel

Thema: Unit-Test (DotCover): Stackoverflow-Exception
Am im Forum: Rund um die Programmierung

Dann funktioniert es. Problem, wir möchten gerne unsere Testabdeckung wissen, bzw. sehen, welche Methoden noch nicht abgedeckt wurden.

Thema: Unit-Test (DotCover): Stackoverflow-Exception
Am im Forum: Rund um die Programmierung

Schönen Abend euch,

derzeit habe ich ein ziemlich komisches Problem.
Ich habe ca. 300 Unit-Tests, wenn ich diese versuche zu durchlaufen bekomme ich kein
Problem. Wenn ich jetzt jedoch eine Analyse mit DotCover mache, kommt es zu einer

Fehler
StackOverflow-Exception
Die Task Runnger Application von ReSharper stürtz ab, mit der Fehlermeldung:
Fehler
"Task Runner Application funktioniert nicht mehr" Ereignisname: "APPCRASH".

Versuche ich dies zu debuggen, sehe, ich das in dieser CodeStelle eine StackOverflowException entsteht:


 public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            IMethodReturn next = null;
            
            _interceptor.Process(input.Target, input.MethodBase, () =>
            {
                if (getNext == null) return;
                
//hier wird auf die Exception verwiesen
                next = getNext()(input, getNext);

                if (next != null && next.Exception != null)
                {
                    throw next.Exception;
                }
            });

            return next;
        }

Dies ist eigentlich nur eine Implementierung eines InterceptionBehavior aus der Enterprise Library.

Das wirklich komische aber ist, es liegt nicht an einem spezifischen Test. Wenn ich den Test deaktivieren, an diesem der DotCover abstürzt, schlägt er bei einem anderen Test fehl.
Das sind auch wirklich alle informationen die ich bekommen habe, es wird mir ja nicht einmal angezeigt, an welchem Test er hängen bleibt. Ich habe aber gemerkt, dass das Durchlaufen eines Tests, immer länger dauert, bis er eben endgültig abschmirt.

Hat jemand eine Idee?