Mit der dll klappt es, kopiere ich jedoch auch die beiden Dateien .deps.json und .runtimeconfig.json kommt folgender Fehler auf dem Mac.
A fatal error was encountered. The library 'libhostpolicy.dylib' required to execute the application was not found in '/Users/nicolewohlfahrt/Documents/VS_Projekte/publish/'.
Failed to run as a self-contained app.
- The application was run as a self-contained app because '/Users/nicolewohlfahrt/Documents/VS_Projekte/publish/Wohltat.Office.FileManager.runtimeconfig.json' did not specify a framework.
- If this should be a framework-dependent app, specify the appropriate framework in '/Users/nicolewohlfahrt/Documents/VS_Projekte/publish/Wohltat.Office.FileManager.runtimeconfig.json'.
Nachtrag: Ich habe auf einem Test Mac VS for Mac installiert und nutze hiervon die beiden genannten .json Dateien. Zusammen mit der dll vom Win Rechner läuft das Programm. Jedoch muss es auch möglich sein alles vom Win Rechner zu nutzen, da ich den Test Mac nicht mehr lange habe. Das ist also aktuell nur ein Workaround.
Ich verbringe bereits zu viel Zeit damit Dokumentationen zu lesen, stehe hier etwas unter Zeitdruck.
Kannst du mich nicht gerade bis zum Ziel führen und im Anschluss nehme ich miir die Zeit dafür?
Das ist der letzte Schritt um einfach nur die Konsolenanwendung auf dem Mac auszuftühren.
Ich verstehe nicht ganz was du mit "Du darfst keine Publish-Befehle mit Ausgabe-Ordner auf die Solution (*.sln) ausführen, sondern immer nur auf das Projekt (*.csproj)" meinst. Dazu finde ich auch nicht den richtigen Hinweis in dem Link wie ich es auf die csproj umstelle.
Nachtrag:
Bin jetzt mit cd in das Verzeichnis der csproj und habe dann den untenstehen Befehl ohne Warnung ausgeführen können, jedoch wieder mit einem leeren publish Ordner. Jabe auch versucht ein neues leeres Projekt zu erstellen mit dem gleichen Ergebnis.
dotnet publish -c Release --sc -o ./publish
Nachtrag 2:
Wenn ich in den Projekteigenschaft das Zielbetriebssystem auf "(Keine)" umstelle dann klappt es und ich bekomme Dateien in meinen Ausgabepfad.
Hier sind dann auch die beiden wichtigen Dateien dabei.
.deps.json
.runtimeconfig.json
Wie hattest du es getestet und läuft es dann auch auf dem Mac?
So langsam verzweifle ich, habe jetzt auf NET. 8 folgenden Befehl ausgeführt ohne Fehler:
dotnet publish -c Release --sc
MSBuild-Version 17.9.6+a4ecab324 für .NET
Wiederherzustellende Projekte werden ermittelt...
Alle Projekte sind für die Wiederherstellung auf dem neuesten Stand.
Wohltat.Office.FileManager -> D:\Wohltat.Office\Wohltat.Office.FileManager\Wohltat.Office.FileManager\bin\Release\net8.0-macos12.0\osx-x64\Wohltat.Office.FileManager.dll
Created the package:
Habe das -o ./Folder weggelassen auf Grund einer Warnung.
Die Option "--output" wird beim Erstellen einer Lösung nicht unterstützt. Die Angabe eines Ausgabepfads auf Projektmappenebene führt dazu,
dass alle Projekte Ausgaben in dasselbe Verzeichnis kopieren, was zu inkonsistenten Builds führen kann.
Es wurde wieder ein leeres Verzeichnis erstellt
bin\Release\net8.0-macos12.0\osx-x64\publish
Die Seiten habe ich auch schon alle gefunden, aber leider bin ich nicht viel schlauer daraus geworden.
Im Prinzip ist das auch nicht ganz meine Welt, würde es nur gerne zum laufen bringen.
Habe die Anwendung auf .NET 8 umgestellt und es nochmal mit <RuntimeIdentifier>osx-x64</RuntimeIdentifier> versucht, aber auch hier ohne Erfolg.
Was mich wundert ist das er sagt "Der angegebene RuntimeIdentifier "win-osx-x64" wird nicht erkannt.", dabei steht in der csproj ja osx-x64.
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-macos12.0</TargetFramework>
<RuntimeIdentifiers>osx-x64</RuntimeIdentifiers>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Habe ich auch so probiert:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0-macos12.3</TargetFramework>
<RuntimeIdentifiers>osx-64</RuntimeIdentifiers>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<SupportedOSPlatformVersion>12.0</SupportedOSPlatformVersion>
</PropertyGroup>
Bekomme dann schon beim kompilieren den Fehler "NETSDK1083 Der angegebene RuntimeIdentifier osx-64 wird nicht erkannt.".
Was könnte noch fehlen?
Habs mit mit der Console versucht und bekomme tatsächlich einen Fehler:
C:\Program Files\dotnet\sdk\8.0.202\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(90,5): error NETSDK1083: Der angegebene RuntimeIdentifier "win-osx-x64" wird nicht erkannt.
Hier noch meine csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0-macos12.3</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<SupportedOSPlatformVersion>12.0</SupportedOSPlatformVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Eigentlich habe ich alles auf .NET 7 ausgerichtet, verstehe nicht wirklich warum er hier von 8 spricht in dem Fehler.
Wie und wo setze ich den richtigen RuntimeIdentifier?
Danke für die Hilfe, so habe ich es probiert. Trotz Erfolgsmeldung habe ich einen leeren publish Ordner.
Woran könnte das liegen?
Hallo zusammen,
ich bin mir nicht sicher ob das der richtige Ort für mein Problem ist.
Ich verrsuche für einen Freund eine einfache Konsolenanwendung für seinen Mac zu entwickeln.
Hierzu nutze ich VS 2022 auf einem Windows Rechner. In den Projekteigenschaften habe ich alles soweit eingestellt, sh. Anhang.
Unter bin\Release\net7.0-macos12.3\osx-x64 finde ich alle erstellten Dateien. Jetzt fehlt mir nur noch das Wissen wie ich das ganze für den Mac bereitstelle.
Vielen Dank für eure Hilfe schonmal.
Hallo zusammen,
im Prinzip müsste ich nur wissen wie ich in der CodeBhind an das Image komme um die Size zu ermitteln.
Ziel ist es den Scale je nach Seitenverhätnis des Image anzupassen.
<Frame StyleClass="BalancedFrame">
<Image x:Name="imgImage"
Source="test.jpg" />
</Frame>
Mit imgImage.X/Y bekomme ich keine Werte.
Danke euch
Gruß Steven
Hi Abt,
habe mir die Doku zu async und await angesehen und auch bereits angewendet bzw. nachvollzogen.
Habe hierzu noch eine Frage. Du sagst ja ich soll immer die async Methoden verwenden, als z.b. so:
private static async void UseCase_QueryTypesAsync(DataContext dbContext)
{
// nur zur Demonstration ein kleines View, hier brauch man keine Migration
var result = await dbContext.VW_Test.ToListAsync();
Console.WriteLine(string.Join("\n", result));
}
Aber was bringt es in diesem Fall? Hier wird doch sowieso nur der eine Aufruf gemacht? Oder ist dann die Methode ToListAsync an sich schon schneller?
Edit: Habe es gerade mal mit der Klasse Stopwatch gemessen (jeweils 5-6 mal). Ich brauche mit async und await im Schnitt 0,2 Sekunden länger.
Ich habe den Fehler gefunden. Das View ist jedes mal verschwunden wenn man im DB Browser die Verbindung schließt und wieder öffnet. Hier muss man noch den Button "Änderungen schreiben" nutzen, erst dann existiert das View tatsächlich. Vorher kann man aber schon via SQL in dem Tool damit Abfragen generieren. Sorry, ich arbeite erst jetzt mit diesem Tool und hab es nicht bemerkt. Danke für deine Hilfe.
Ne, es gibt nur eine DB. Ich habe den ConnectionString zur besseren Lesbarkeit immer gekürzt, der geht definitiv auf die richtige DB. Und es gibt nur einen Context. Ich gehe davon aus das Sqlite evtl. das nicht unterstützt. Habe bei Google auch nichts gefunden.
Was genau meinst du mit falschen Context?
Mit Raw Sql kommt der selbe Fehler "no such table".
dbContext.VW_Test.FromSqlRaw(@"select * from VW_Test").ToList()
Das Thema Logging wurde in meinem Tutorial erst jetzt behandelt. Hier spuckt die Console nun folgendes aus:
Fehlermeldung:
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 5.0.1 initialized 'DataContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None
fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
Failed executing DbCommand (10ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT "v"."Nachname", "v"."Vorname"
FROM "VW_Test" AS "v"
fail: Microsoft.EntityFrameworkCore.Query[10100]
An exception occurred while iterating over the results of a query for context type 'Beispielanwendung_Einfach.DataContext'.
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: VW_Test'.
at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements(Stopwatch timer)+MoveNext()
at Microsoft.Data.Sqlite.SqliteCommand.GetStatements(Stopwatch timer)+MoveNext()
at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable1.Enumerator.InitializeReader(DbContext _, Boolean result) at Microsoft.EntityFrameworkCore.Storage.NonRetryingExecutionStrategy.Execute[TState,TResult](TState state, Func
3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable
1.Enumerator.MoveNext()
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: VW_Test'.
at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements(Stopwatch timer)+MoveNext()
at Microsoft.Data.Sqlite.SqliteCommand.GetStatements(Stopwatch timer)+MoveNext()
at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable1.Enumerator.InitializeReader(DbContext _, Boolean result) at Microsoft.EntityFrameworkCore.Storage.NonRetryingExecutionStrategy.Execute[TState,TResult](TState state, Func
3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable
1.Enumerator.MoveNext()
Das hier ist mein gesamter Context:
public class DataContext : DbContext
{
// Für die zu erzeugende Tabelle nach dem Code first Prinzip
public DbSet<Person> Personen { get; set; }
public DbSet<Geschlecht> Geschlechter { get; set; }
public DbSet<Herkunft> Herkunft { get; set; }
public DbSet<Kontinent> Kontinent { get; set; }
public DbSet<Hobby> Hobby { get; set; }
public DbSet<PersonHobby> PersonHobby { get; set; }
public DbSet<VW_Test> VW_Test { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(@"Data Source=D:\Daten\EntityFrameworkTutorial.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var personBuilder = Build<Person>(modelBuilder);
var geschlechtBuilder = Build<Geschlecht>(modelBuilder);
var herkunftBuilder = Build<Herkunft>(modelBuilder);
var kontinentBuilder = Build<Kontinent>(modelBuilder);
var hobbyBuilder = Build<Hobby>(modelBuilder);
var personhobbyBuilder = Build<PersonHobby>(modelBuilder);
// Property Bedingungen festlegen
personBuilder
.Property(x => x.Geburtsdatum)
.IsRequired();
personBuilder
.Property(x => x.HerkunftId)
.IsRequired();
personBuilder
.Property(x => x.IQ)
.HasDefaultValue(0)
.IsRequired();
herkunftBuilder
.Property(x => x.Deutschsprachig)
.HasDefaultValue(false);
// 1 zu n Beziehungen
personBuilder
.HasOne(x => x.Geschlecht)
.WithMany(x => x.Personen)
.HasForeignKey(x => x.GeschlechtId);
personBuilder
.HasOne(x => x.Herkunft)
.WithMany(x => x.Personen)
.HasForeignKey(x => x.HerkunftId);
herkunftBuilder
.HasOne(x => x.Kontinent)
.WithMany(x => x.Herkunft)
.HasForeignKey(x => x.KontinentId);
// m zu n Beziehungen
personhobbyBuilder
.HasOne(x => x.Person)
.WithMany(x => x.PersonenHobbys)
.HasForeignKey(x => x.PersonId);
personhobbyBuilder
.HasOne(x => x.Hobby)
.WithMany(x => x.PersonenHobbys)
.HasForeignKey(x => x.HobbyId);
// View
modelBuilder.Entity<VW_Test>()
.HasNoKey()
.ToView("VW_Test");
base.OnModelCreating(modelBuilder);
}
private EntityTypeBuilder<T> Build<T>(ModelBuilder mb)
where T : Entity
{
var entity = mb.Entity<T>();
entity.HasKey(x => x.Id);
// Shadow Properties anlegen die für Entity nicht sichtbar sind und autom. gefüllt werden
entity.Property<string>("LatestUser")
.HasDefaultValue("Admin");
return entity;
}
}
Der Zugriff auf alle anderen Tabellen klappt problemlos.
Anbei noch ein Auszug aus meinem DB Browser, die Ansicht existiert und kann auch mit SQL abgerufen werden im DB Browser.
Schaue ich mir an, danke dir.
Das hier erzeugt leider den selben Fehler.
var result = dbContext.VW_Test.ToList();
Woher kommt .ToView, das findet er leider nicht?
Danke für den Hinweis mit dem Unterstrich, ist eh erstmal alles nur ein Test.
Das View existiert zu 100% und beinhaltet auch Daten.
Hi Abt,
das Thema mit await und async wollte ich mir separat ansehen, habe erstmal darauf verzichtet da ich noch nicht wirklich verstehe was da passiert, bzw. was es genau bringt. Könntest du es evtl. kurz beschreiben anhand eines kleinen Beispiels, oder mir evtl. ein gutes Tutorial dazu emphelen?
Und kannst du mir auch noch erklären wozu genau das dient? brauch man das Ausrufungszeichen hinter dem null?
public string Vorname { get; set; } = null!;
Gruß Steven
Hallo zusammen,
ich bekomme beim Zugriff auf ein View welches definitiv auf der Sqlite DB existiert den Fehler "no such table: VW_Test". Der generelle Zugriff auf die Tabellen funktioniert wunderbar. Könnt ihr mir evtl. sagen was hier das Problem ist?
public DbSet<VW_Test> VW_Test { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(@"Data Source=D:\Daten\EntityFrameworkTutorial.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<VW_Test>()
.HasNoKey()
.ToView("VW_Test");
base.OnModelCreating(modelBuilder);
}
public class VW_Test
{
public string Vorname { get; set; }
public string Nachname { get; set; }
}
private static void UseCase_QueryTypes(DataContext dbContext)
{
var result = dbContext.Set<VW_Test>().ToList();
}
Danke dir, das hat schon geholfen 😃
Hallo zusammen,
ich bin gerade dabei mir EF Core anzueignen. Hier mein Beispiel mit Sqlite:
public class DataContext : DbContext
{
// Für die zu erzeugende Tabelle nach dem Code first Prinzip
public DbSet<Person> Personen { get; set; }
public DbSet<Geschlecht> Geschlechter { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(@"Data Source=D:\Daten\Steven IT\Daten\C# Entity Framework Core\Beispielanwendung Einfach\Beispielanwendung Einfach\Data\EntityFrameworkTutorial.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Geschlecht>()
.HasMany(g => g.Personen)
.WithOne(p => p.Geschlecht);
}
}
public class Person
{
public int Id { get; set; }
public string Vorname { get; set; }
public string Nachname { get; set; }
public Geschlecht Geschlecht { get; set; }
}
public class Geschlecht
{
public int Id { get; set; }
public string Bezeichnung { get; set; }
public List<Person> Personen { get; set; }
}
class Program
{
static void Main(string[] args)
{
using (var db = new DataContext())
{
var maennlich = new Geschlecht();
maennlich.Bezeichnung = "Männlich";
db.Geschlechter.Add(maennlich);
var weiblich = new Geschlecht();
weiblich.Bezeichnung = "Weiblich";
db.Geschlechter.Add(weiblich);
db.Personen.Add(person);
person = new Person();
person.Vorname = "Steven";
person.Nachname = "S.";
person.Geschlecht = maennlich;
db.Personen.Add(person);
person = new Person();
person.Vorname = "Lisa";
person.Nachname = "S.";
person.Geschlecht = weiblich;
db.Personen.Add(person);
db.SaveChanges();
}
using (var db = new DataContext())
{
foreach (var person in db.Personen)
{
Console.WriteLine($"{person.Id}. {person.Vorname} {person.Nachname} ({person.Geschlecht.Bezeichnung})");
}
}
Console.ReadKey();
}
}
Das speichern klappt wunderbar, hier wird die Id des Geschlechts autom. hinzugefügt.
Jedoch ist beim Anzeigen der Daten in der Console person.Geschlecht = null. In der Datenbank sieht alles gut aus.
Könnt ihr mir sagen was hier noch fehlt?
Gruß Steven
Danke für die Antwort, ich schaue mir das Thema Styles und Templates direkt ausführlich an.
Hallo,
ich habe mir ein Statusfenster gebaut und möchte dieses ständig aktualisieren während der Laufzeit.
Das klappt zwar über INotifyPropertyChanged, jedoch immer nur wenn das Programm gerade nichts zu tun hat. In Win Forms konnte man einfach this.Refresh() machen, was mache ich hier falsch?
namespace PSWPF
{
public partial class WPFSplashScreen : Window
{
#region Props und Konstruktor
private Status oStatus;
public WPFSplashScreen(string sProgramName, string sVersion)
{
InitializeComponent();
labProgramName.Content = sProgramName;
labVersion.Content = sVersion;
oStatus = new Status();
this.DataContext = oStatus;
}
#endregion
#region Hilfsmethoden
public void SetStatusText(string sText)
{
oStatus.sStatus = sText;
}
public string GetStatusText()
{
return oStatus.sStatus;
}
#endregion
}
public class Status : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _status;
public string sStatus
{
get { return _status; }
set
{
_status = value.Trim();
OnPropertyChanged("sStatus");
}
}
private void OnPropertyChanged(string sProperty)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(sProperty));
}
}
}
Diesen öffne ich über meine Hauptanwendung und versuche ihn zur Laufzeit zu ändern.
...
this.oWPFSplashScreen = new WPFSplashScreen(this.ProgramName, this.Version);
this.oWPFSplashScreen.Show();
this.oWPFSplashScreen.SetStatusText("Login...");
...
Das Binding funktioniert soweit, jedoch sehe ich den Text "Login..." erst wenn alle Prozesse nach this.oWPFSplashScreen.SetStatusText("Login..."); abgeschlossen sind. Wie bekomme ich den Text noch während die Methode abgearbeitet wird angzeigt?
Da ich noch ziemlicher Anfänger bin würde ich mich über ein ausführliches Beispiel was ich zu tun habe sehr freuen.
Gruß Steven
Hallo zusammen,
ich habe in einem seperaten Projekt ein Window welches in den Ressourcen ein festes Bild hat. Pfad "Resources\Logo.bmp". Dieses habe ich über die Projekteigenschaften auch unter Ressourcen hinzugefügt.
In diesem Projekt zeige ich das Image so an:
<Image Name="pbLogo" Width="230" Height="66" Grid.Column="0" Source="/Resources/Logo.bmp" />
Das funktioniert auch in dem Projekt. Wenn ich die dll jedoch in einem anderen Projekt einbinde und dieses Window öffnen will mit...
WPFWindow oWPFWindow = new WPFWindow();
oWPFWindow .Show();
..dann zeigt er mir das Fenster ohne das Logo an. Wie kann ich das Logo fest in diesem Window verankern, ohne das ich es im neuen Projekt auch wieder einbinden muss?
Danke vorab für die Hilfe.
Base:
namespace PSBase.FE.WPF
{
public partial class PSWPF : Window
{
...
}
}
<Window x:Class="PSBase.FE.WPF.PSWPF"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PSBase.FE.WPF"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300" Background="WhiteSmoke">
<StackPanel>
</StackPanel>
</Window>
Testanwendung:
...
using PSBase.FE.WPF;
namespace Test
{
public partial class MainWindow : PSWPF
{
public MainWindow()
{
InitializeComponent();
}
}
}
<local:PSWPF x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PSBase.FE.WPF"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</local:PSWPF>
Habe es mal so versucht, dann kommen folgende Fehler:
Fehler 1: Der Name "PSWPF" ist im Namespace "clr-namespace:PSBase.FE.WPF" nicht vorhanden.
Fehler 2: local:PSWPF wurde nicht gefunden
Hallo zusammen,
leider konnte ich mein Problem auch nach längerer Suche nicht lösen. Ich habe mir eine Klassenbibliothek als Basis für WPF Projekte entwickelt.
namespace PSBase.FE.WPF
{
public partial class PSWPF : Window
{
...
}
}
<Window x:Class="PSBase.FE.WPF.PSWPF"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PSTeam.PSBase.FE.WPF"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300" Background="WhiteSmoke">
<StackPanel>
</StackPanel>
</Window>
Nun versuche ich diese in einem neuen WPF Projekt einzubinden.
...
using PSBase.FE.WPF;
namespace Test
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : PSWPF
{
public MainWindow()
{
InitializeComponent();
}
}
}
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Test"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
Hier kommt beim kompilieren dann der im Betreff genannte Fehler. Was genau muss ich ändern damit ich in meinem Testprojekt die Base nutzen kann?
Danke vorab,
Gruß Steven
Leider scheine ich zu blöd zu sein um das Ganze zu verstehen. Ich bräuchte evtl. etwas Starthilfe.
public class Repository
{
private string sSQLPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "Team.SQLite");
public Repository()
{
using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPathSpielstatistik, false))
{
con.CreateTable<SAI_Saison>();
con.CreateTable<SPI_Spieler>();
con.CreateTable<SAI_SPI_Saison_Spieler>();
}
}
private List<SPI_Spieler> GetAll_SPI_Spieler()
{
using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
{
return con.Table<SPI_Spieler>().Where(s => s.Aktiv == true).ToList() ?? new List<SPI_Spieler>();
}
}
public List<SAI_Saison> GetAll_SAI_Saison()
{
using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
{
return con.Table<SAI_Saison>().ToList() ?? new List<SAI_Saison>();
}
}
private SAI_SPI_Saison_Spieler Get_SAI_SPI_Saison_Spieler(int iSaison_ID, int iSpieler_ID)
{
using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
{
return con.Table<SAI_SPI_Saison_Spieler>().Where(s => s.Saison_ID == iSaison_ID && s.Spieler_ID == iSpieler_ID).ToList().FirstOrDefault() ?? new SAI_SPI_Saison_Spieler();
}
}
}
Hier ein Auszug aus meiner Repository Klasse aus App1. Jetzt will ich im Grunde lediglich aus App2 auf die bereits dort gespeicherten Daten zugreifen.
Am besten arbeite ich immer mit Video Tutorials. Nur leider habe ich noch keines gefunden was mich weiter bringt.
Gruß Steven
Gibt es irgendwo evtl. ein Beispiel? Mir geht es nur darum Daten aus 2 Tabellen meiner SQLite Datenbank zu übertragen.
Hallo zusammen
ich habe zwei Apps mit ähnlicher Datenbankstruktur welche beide mit SQLLite erstellt wurden.
hier ein Beispiel.
// Zugriff aus der App 1
private string sSQLPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "App.SQLite");
// Pfad: "/data/user/0/com.App/files/App.SQLite"
using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
{
con.CreateTable<TAB_Tabelle>();
// Insert...
}
Jetzt Will ich aus der zweiten App auf die Datenbank der ersten App zugreifen um z.B. grundlegende Daten zu übernehmen.
// Zugriff aus der App 2
private string sSQLPath = "/data/user/0/com.App/files/App.SQLite"
if (File.Exists(sSQLPath))
{
using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
{
con.CreateTable<TAB_Tabelle>();
// Get...
}
}
Hier kommt die Fehlermeldung SQLite.Net.SQLiteException: Could not open database file: /data/user/0/com.App/files/Trainingsbeteiligung.SQLite (CannotOpen).
Wenn ich z.B. die Datenbank kopieren will mit File.Copy("/data/user/0/com.App/files/App.SQLite", "/data/user/0/com.App2/files/App.SQLite", true);,
kommt die Fehlermeldung System.UnauthorizedAccessException: Access to the path.
Evtl. ist es ein Berechtigungsproblem.
Geht es überhaupt auf die DB der anderen App zu zu greifen?
Gruß Steven
Die WebMethode ist meine eigene. Leider hilft auch das löschen und neu erstellen der dlls nicht.
Komisch ist das ich aus einer anderen Konsolenanwendung in den WS debuggen kann. Es läuft alles lokal über einen WS der auch lokal ist. Die Konsolenanwendung ist doch im Grunde nichts anderes wie die Win Anwendung.
Wie genau mache ich das?
Daran habe ich auch schon gedacht, muss ich was bestimmtes löschen an einem bestimmten Ort damit es neu erstellt wird?
Hallo Zusammen,
seit kurzen habe ich ein Problem damit aus ein Windows Anwendung in meinen lokalen WS zu debuggen, per Einzelschritt. Hier kommt die angehängte Fehlermeldung.
Bevor ich jetzt den kompletten Code poste, hoffe ich das jemand evtl. auf anhieb weiß woher diese Fehlermeldung kommt.
Danke schonmal
Hallo zusammen,
gibt es eine Möglichkeit im DatePicker mehrere Tage zu markieren, um zu erkennen ob zu bestimmten Tagen z.B. bereits Einträge hinterlegt sind? Quasi genauso wie der heutige Tag farbig anders dargestellt ist.
Gruß Steven
Versuche ich, seltsamerweise steht in Extras -> Optionen -> Umgebung -> Internationale Einstellung nur Deutsch zur Auswahl. Will ich Englisch installieren sagt er mir es wäre bereits installiert.
Hallo zusammen,
ich versuche gerade aus meinem fertigen Projekt eine APK mit VS 2013 zu erstellen. Hierzu gehe ich wie folgt vor:
Er fängt auch an im Release Verzeichnis ein entsprechendes Unterverzeichnis ...apk.mSYM zu erstellen, leider kommt jedoch die folgende Fehlermeldung:
Fehlermeldung:
Es wurden Konflikte zwischen verschiedenen Versionen derselben abhängigen Assembly gefunden, die nicht gelöst werden können.
Diese Verweiskonflikte werden im Buildprotokoll aufgelistet, wenn die Protokollausführlichkeit auf "Ausführlich" festgelegt ist.
Ich weiß leider nicht wirklich wo genau ich jetzt suchen soll.
Danke für eure Hilfe.
Ich konnte das Problem nun endlich lösen.
Zum einem wie schon angesprochen durch das Paket.
Zusätzlich brauchte ich dann noch das Paket:
Die Warnung ist nun verschwunden und mein Projekt/Leben hat wieder einen Sinn 😃
Nach einigen weiteren Recherchen kam ich darauf,
SQLite.Net.Platform.XamarinAndroid (Version 3.1.0)
durch
SQLite.Net.Platform.XamarinAndroidN (Version 3.1.1)
zu ersetzen, jedoch kommt nun die unten stehende Fehlermeldung.
Fehlt mir noch ein bestimmtes Paket? Die dll SQLite.Net zeigt die version 3.1.0 obwohlich das Paket SQLite.Net PCL Version 3.1.1 installiert habe.
Für jeden Hinweis bin ich mehr als dankbar.
Ich habe folgendes gefunden wenn ich nur die Warnungen aktiviere. Hier finde ich ebenfalls auch die Meldung um die es geht. Hilft das zur weiteren Analyse?
Ich denke das ist in VS2013 das Fenster unter Extras -Android -> Geräteprotokoll.
Leider steht dieses Logging niemals still wenn ich das Debugging starte. Unter Filter gibt es zig Auswahlmöglichkeiten. Ich weiß jedoch überhaupt nicht was genau ich am besten auswähle.
Wie genau komm ich da dran. Ich debugge bzw.
deploye direkt auf mein S7, die Log existiert dann doch irgendwo dort. Danke für einen kurzen Hinweis.
Welche Version von Xamarin und der SQLite library verwendest du?
Kannst du mir damit weiterhelfen?
Hier mein Code. Mit blocksDescendants verhindere ich das man einen Wert willkürlich durch Texteingabe in dem Control ändern kann.
<NumberPicker
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:id="@+id/numberPicker" />
string[] arValues = { "Text1", "Text2" };
numberPicker.SetDisplayedValues(arValues);
numberPicker.MinValue = 1;
numberPicker.MaxValue = 2;
Ich hoffe das ich richtig schaue. Wenn ich auf die Assembly SQLite.Net oder SQLite.Net.Plattform.Xamarin.Android klicke bekomme ich im Eigenschaftsfenster die Version 3.1.0.0 angezeigt, bzw. die Laufzeitversion v4.0.30319.
In der Systemsteuerung -> Programme und Funktionen steht bei Xamarin die Version 4.3.0.784.
Ich arbeite außerdem mit VS2013.
Hallo zusammen,
ich habe gestern mein Samsung S7 auf die Android Version 7.0 aktualisiert.
Seit dem bekomme ich bei jedem Programmstart meiner Xamarin App eine Warnung angezeigt, sh. Screenshot. Die Ausführung des Programms ist aber nicht beeinträchtigt.
Hier ein Auszug aus meinem Code wie ich den DB Zugriff handhabe. Wie gesagt klappt alles wunderbar, aber die Warnung nervt natürlich bei der Verwendung.
Ich habe im Netz dazu auch schon das ein oder andere gefunden. Leider brachte mich das nicht wirklich weiter.
Eventuell könnt ihr mir weiterhelfen.
string sPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TB.SQLite");
using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroid(), s.Path, false))
{
return con.Table<MyTable>().ToList() ?? new List<MyTable>();
}
Vielen dank, habs hinbekommen.
Ich arbeite mit VisualStudio und da gibt es den NumberPicker. Das ist im Grunde das was ich brauche. Kann man den auch für Text nutzen, quasi als TextPicker?
Hallo zusammen,
ich benötige für mein kleines Android Projekt eine Art Liste. In dieser soll durch hoch oder runter scrollen ein bestimmter Wert ausgewählt werden, der Wert der in der Mitte steht. Ich weiß das dies in iOS über einen sogenannten Popover Controler gelöst werden kann. Doch wie sieht das in Android aus.
Danke schonmal.
Hallo zusammen,
ich bin bin gerade an der Entwicklung an einer ersten kleinen App mit Xamarin. Momentan ausschließlich für Android. Wie verhält sich das eigentlich mit der Veröffentlichung im Store wenn man z.B. diese für 0,99 € anbieten möchte? Wird hier ein Kleingewerbe verlangt?
Außerdem würde mich interessieren wie es damit ist seine Idee schützen zu lassen, so dass man diese nicht einfach nachmachen kann?
Gruß Steven
Die 101 😃.
Was aber irgendwie nicht geklappt hat war:
public override void OnBackPressed()
{
base.OnBackPressed();
Intent oIntend = new Intent(this, typeof(SavedItemsViewActivity));
oIntend.PutExtra("lstSavedIems", JsonConvert.SerializeObject(lstSavedItems));
SetResult(Result.Ok, oIntend);
Finish();
}
Hier ist das Intend dann in der OnActivityResult null.