Laden...

Namespace & Class -> Including-Problem (Anfänger)

Erstellt von Froschkoenig84 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.889 Views
F
Froschkoenig84 Themenstarter:in
63 Beiträge seit 2015
vor 6 Jahren
Namespace & Class -> Including-Problem (Anfänger)

Hallo.

Ich habe bisher nur ein wenig mit Web-Site-Projekten gebastelt aber noch kein Web-App-Projekt entworfen. - Bzw. ist das hier mein erstes...

ProjectName: Peppermint

Mir wurde gesagt, dass ich das Verzeichnis App_Code nicht mehr so verwenden kann, wie bisher und daher am Besten ganz weg lasse. Jetzt habe ich ein Verzeichnis mit Namespace und Classes darin hinzugefügt...

 [B]Peppermint.Crypt.Crypt.cs[/B]: [csharp]using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace Peppermint.Crypt
{
    public class Md5
    {
        /// <summary>Convert Text to MD5 hash.</summary>
        /// <param name="PlainText">Text (String), which should be hashed.</param>
        /// <returns>MD5 hash (String).</returns>
        public static string ToHash(string PlainText)
        {
            if (!string.IsNullOrEmpty(PlainText))
            {
                return BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(PlainText)));
            }
            return string.Empty;
        }
    }

    public class Aes
    {
        /// <summary>Encrypt plain text to an AES String.</summary>
        /// <param name="PlainText">Plain text (String), which should be encryped.</param>
        /// <param name="Key">Key, which should be used for encrypting (like a password).</param>
        /// <returns>Plain text (String).</returns>
        public static string Enc(string PlainText, string Key)
        {
            string CipherText = string.Empty;
            byte[] BytesBuff = Encoding.Unicode.GetBytes(PlainText);
            using (System.Security.Cryptography.Aes Aes = System.Security.Cryptography.Aes.Create())
            {
                Rfc2898DeriveBytes Crypto = new Rfc2898DeriveBytes(CryptMd5.ToHash(Key), new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                Aes.Key = Crypto.GetBytes(32);
                Aes.IV = Crypto.GetBytes(16);
                using (MemoryStream MStream = new MemoryStream())
                {
                    using (CryptoStream CStream = new CryptoStream(MStream, Aes.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        CStream.Write(BytesBuff, 0, BytesBuff.Length);
                        CStream.Close();
                    }
                    CipherText = Convert.ToBase64String(MStream.ToArray());
                }
            }
            return CipherText;
        }

        /// <summary>Decrypt an AES String to plain text.</summary>
        /// <param name="CipherText">Encrypted text (String) to decrypt.</param>
        /// <param name="Key">Key, which should be used for decrypting (like a password).</param>
        /// <returns>Plain text (String).</returns>
        public static string Dec(string CipherText, string Key)
        {
            string PlainText = string.Empty;
            CipherText = CipherText.Replace(" ", "+");
            byte[] BytesBuff = Convert.FromBase64String(CipherText);
            using (System.Security.Cryptography Aes = System.Security.Cryptography.Create())
            {
                Rfc2898DeriveBytes Crypto = new Rfc2898DeriveBytes(CryptMd5.ToHash(Key), new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                Aes.Key = Crypto.GetBytes(32);
                Aes.IV = Crypto.GetBytes(16);
                using (MemoryStream MStream = new MemoryStream())
                {
                    using (CryptoStream CStream = new CryptoStream(MStream, Aes.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        CStream.Write(BytesBuff, 0, BytesBuff.Length);
                        CStream.Close();
                    }
                    PlainText = Encoding.Unicode.GetString(MStream.ToArray());
                }
            }
            return PlainText;
        }
    }

    public class Des
    {



    }
}[/csharp] [IMG]https://img1.picload.org/image/daaoidla/crypt.png[/IMG]
 
 
 
[B]Peppermint.Default.aspx.cs[/B]: [csharp]using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Net;
using System.IO;
using Peppermint.Crypt;
using CsQuery; //docu: https://github.com/jamietre/CsQuery

namespace Peppermint
{
    public partial class PageDefault : System.Web.UI.Page
    {
        //string test = "test";
        string Test = Peppermint.Crypt.Aes.Dec("value", "key");

        protected void Page_Load(object sender, EventArgs e)
        {
            HtmlGenericControl HtmlContainer = new HtmlGenericControl("body");

            Response.Write("TEST: "+ HtmlContainer.InnerHtml.ToString());
            HtmlContainer.ID = "NewControl";

            CQ Dom = HtmlContainer.InnerHtml.ToString();
            Dom["body"].Text("yeaaahhh");
            Dom.Render();
            HtmlContainer.InnerHtml = Dom["html"].Html();
        }
    }
}[/csharp] [IMG]https://img1.picload.org/image/daaoidll/default.png[/IMG] 

Warum kann ich nicht auf den Namespace zugreifen? Auch wenn ich es direkt in Peppermint setze, klappt es nicht. 😕 - Ich will doch nur aus der Default die Methoden in meiner Crypt aufrufen. 😕

Was mach ich falsch?

16.834 Beiträge seit 2008
vor 6 Jahren

Was mach ich falsch?

[Hinweis] Wie poste ich richtig? 6.1 Bilder als Dateianhang hochladen

F
Froschkoenig84 Themenstarter:in
63 Beiträge seit 2015
vor 6 Jahren

Wollte keinen zusätzlichen Beitrag erzeugen. Und meine PNGs wurden zwar angehängt, aber nicht korrekt positioniert.

16.834 Beiträge seit 2008
vor 6 Jahren

Pro Beitrag kann ein Bild angehängt werden; um mehr als ein Bild anzuhängen, dürfen hintereinander mehrere Beiträge erstellt werden.

Zum Problem: schon mal Visual Studio neu gestartet? bin/obj mal entfernt und neu gebaut?

PS: Dein Namespacing ist weit weit weg von dem, was Microsoft bzw. allgemein die Community .NET Richtlinien empfehlen.
[Artikel] C#: Richtlinien für die Namensvergabe

F
Froschkoenig84 Themenstarter:in
63 Beiträge seit 2015
vor 6 Jahren

Nutze eigentlich PascalCase. Musste mich sehr daran gewöhnen, da ich aus der alten C-Syntax nur Kleinbuchstaben kannte. - Ich hab neugestartet, gleicher Fehler. 😕

5.658 Beiträge seit 2006
vor 6 Jahren

Hi Froschkoenig84,

Jetzt habe ich ein Verzeichnis mit Namespace und Classes darin hinzugefügt...

Normalerweise legt man für Namespaces Verzeichnisse an, und dann darin für jede Klasse eine Datei.

 string Test = Peppermint.Crypt.Aes.Dec("value", "key");  

Du mußt eine Instanz deiner Klasse erstellen. Oder eine statische Klasse verwenden.
[FAQ] Wie finde ich den Einstieg in C#?
[Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

klappt es nicht.

Bitte zukünftig die Fehlermeldung mit posten. Mit "klappt nicht" oder "funktioniert nicht" kann man den Fehler nur sehr schwer eingrenzen. Bitte [Hinweis] Wie poste ich richtig? beachten.

Weeks of programming can save you hours of planning

F
Froschkoenig84 Themenstarter:in
63 Beiträge seit 2015
vor 6 Jahren

Das mit der Instanz habe ich schon längst versucht, aber die gleiche Fehlermeldung. (so wie oben im Screenshot) Eigentlich logisch, dass ich die Instanz von der Klasse nicht erzeugen kann, wenn ich keine Referenz zum Namespace erzeugt bekomme.

F
Froschkoenig84 Themenstarter:in
63 Beiträge seit 2015
vor 6 Jahren

So, hab die drei Klassen jetzt mal in einzelne Dateien gesetzt. Sollte zwar eigentlich keinen Unterschied machen, aber die liegen dann alle im entsprechenden Namespace Peppermint.Crypt. Demnach dann also Peppermint.Crypt.Aes und dann die Methode .Dec("test","password"). Aber gleiche Fehlermeldung.

Ich werde mich jetzt mal durch ein paar US-Foren kämpfen, um das Problem zu fixen.

16.834 Beiträge seit 2008
vor 6 Jahren

Bilder sind eigentlich nicht dazu gedacht, dass sie Code darstellen.
Dafür gibt es die CODE- oder CSHARP-Tags..... steht ebenfalls in [Hinweis] Wie poste ich richtig?
Keiner hier hat lust großartig Deinen Code von Hand abzutippen, um das Problem lokal nachvollziehen zu können.

Niemand hat zudem was wegen Pascal Case gesagt.
Eher die Richtlinie von Gestaltung von Namespaces.

Dein Problem kann ich nicht nachvollziehen.
Siehe Anhang. Strukturell identisch.

F
Froschkoenig84 Themenstarter:in
63 Beiträge seit 2015
vor 6 Jahren

Hmmm... sollte ja nur zeigen, wie ich die Dateien angelegt hatte.

Also die Solution und auch meine App heißt bei mir Peppermint (das ist einfach der Name, auf meinem Server laufen mehr als 600 C#.NET-Projekte). - Ansonsten ist alles gleich, nur dass ich mal gelernt hatte, das man keine Partial Classes nutzen soll. Aber ich schau mal, ob ich das so hin bekomme.

Danke erstmal. 😃

16.834 Beiträge seit 2008
vor 6 Jahren

Ansonsten ist alles gleich, nur dass ich mal gelernt hatte, das man keine Partial Classes nutzen soll.

Wer sagt das?
Es gibt Technologien, da braucht man dies zwingend (EF Database First, WebForms).

Apropos WebForms: Dir ist bewusst, dass WebForms abgekündigt ist (seit Jahren) und nicht mehr unterstützt oder weiterentwickelt wird?
Sicher, dass Du nun damit anfangen willst?

W
196 Beiträge seit 2008
vor 6 Jahren

Verwende App_Code oder noch besser - lagere den Code in eine eigene Klassenbibliothek aus. Was Dir zum Thema App_Code Ordner erzählt wurde macht IMHO in Verbindung mit WebForms keinen Sinn.