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 oehrle
Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo, habe das nun soweit hingekriegt, vielen Dank an EUCH !!!
Es war noch ein Problem mit einem weiteren Projekt, das ich in der Solution eingebunden habe. Das Projekt ist in VisualBasic programmiert, das habe ich so gemacht, da ich die DLL' s der externen Firma nicht in C# einbinden konnte. Dazu sind die DLL's einmal mit 32 - und 64-Bit ausgezeichnet. Also hatte ich das alles in VB gemacht, mit den Funktionen die ich brauche und habe dann die erstellte DLL somit in meiner Hauptapplikatin verwendet. Das Problem war jetzt, das ich die 64-Bit-Version nun auch noch erstellen mußte, dazu waren Anpassungen notwendig, egal, habe ich gemacht und dann hatte ich eine DLL für 32- und 64-Bit, die ich nun verwende.
Meine Frage: Zuvor hatte ich in der Hauptapplikation dieses VisualBasic-Applikation als "Projekt" eingebunden.
Gibt eigentlich eine Möglichkeit, das man immer noch das Projekt einbindet, und beim Erstellen werden in der VisualBasicapplikation auch die korrekt bittigen DLL's gezogen?

Das Hauptproblem das ich noch habe ist aber Excel. Ich lese in einem Projekt auch Exceldateien ein ("XLS"-Format, nicht "XLSX"). Da benutze ich die "Interop"-DLL und dazu noch die "Microsoft.Jet.OLEDB.4.0". Da motzt das System bei x64.
Wie kann ich das machen, das es auf x86 und x64 läuft? Das Excelgedöns mit "NPOI" erschlagen ?? Oder gibt es da auch etwas für MSBuild mit "Referenz" ? Das was ich im Nezt gesehen habe, war mit Registrierungen über regsvr32 dieverser DLL's, aber ich kann nicht an zig Rechnern durchgehen und das Zeugs registrieren, das muss pragmatischer laufen.
Hat jemand eine Idee?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Habe das mal probiert, aber ich denke ich bin zu doof dafür, aber es war dann doch noch ein Erfolg zu verzeichnen.

Habe eine Konsolenanwerndung in mit FW4.0 als WPF erstellt.
Habe im Projektverzeichnis zwei Ordner (x86 und x64) angelegt, habe jeweils die beiden DLL's da abgelegt.
Die Projektkonfiguratin hat nur x86 und x64.

Habe die Applikation erstellen lassen, ohne eine Zeile Code eingefügt zu haben.

Was zeigt mir die CSPROJ ? Es ist plötzlich was mit AMD64 drin, hui:


<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{539E4982-E159-4FDD-99AB-E1666BC0B1CE}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <RootNamespace>ConsoleAppDlltest</RootNamespace>
    <AssemblyName>ConsoleAppDlltest</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <PlatformTarget>x64</PlatformTarget>
    <OutputPath>bin\x64\Debug\</OutputPath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <PlatformTarget>x64</PlatformTarget>
    <OutputPath>bin\x64\Release\</OutputPath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <PlatformTarget>x86</PlatformTarget>
    <OutputPath>bin\x86\Debug\</OutputPath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <PlatformTarget>x86</PlatformTarget>
    <OutputPath>bin\x86\Release\</OutputPath>
  </PropertyGroup>
  
  <ItemGroup>
    <Reference Include="sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=AMD64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco.dll</HintPath>
    </Reference>
    <Reference Include="sapnco_utils, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=AMD64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco_utils.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  
  
  <ItemGroup>
    <Compile Include="Program.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="x64\sapnco.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="x64\sapnco_utils.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="x86\sapnco.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="x86\sapnco_utils.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>


Zuerst hatte ich gedacht es geht immer noch nicht, habe es dann aber nochmal probiert, und die beiden <Reference> mtit "AMD64" in die CSPROJ vom anderen Projekt eingbaut, dann nochmal eingebaut für "x86", siehe:


  <ItemGroup Condition="'$(Platform)' == 'x64' ">
    <Reference Include="sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=AMD64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco.dll</HintPath>
    </Reference>
    <Reference Include="sapnco_utils, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=AMD64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco_utils.dll</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup Condition=" '$(Platform)' == 'x86' ">
    <Reference Include="sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x86\sapnco.dll</HintPath>
    </Reference>
    <Reference Include="sapnco_utils, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x86\sapnco_utils.dll</HintPath>
    </Reference>
  </ItemGroup>

Dann hat es auch nun funktioniert. Was ich noch teste ich, wenn die DLL's nur verlinkt sind.
Was komisch ist:
-Warum steht jetzt bei Prozessorarchitektur plötzlich AMD64 ??

Ich werde da noch etwas sran herumspielen, mit Einbindung weiterer Projekte in die Projektmappe.

Eine , zwei weitere Fragen die mich jetzt gerade noch nachdenklich machen: Was passiert, wenn ich ein anderes Projekt oder eine andere Projekt-DLL in dieses Projekt aufnehme, das komplett in C# und nur mit Net-DLL's arbeitet (also keine Net. C++-Dll's)? Muss ich diese Projekt aomit auch mit x86 und x64 - Konfiguration ausstatten, damit alles funktioniert?

Wenn ich umgekehrt jetzt diese DLL mit den Net. C++-Dll's in einem anderen Projekt verwenden, muss ich das andere Projekt auch für x86 und x64 konfigurieren.
Das bedeutet, kein ANYCPU in projekten verwenden, sobald wie hier Net. C++-Dll's mit 64Bit verwendet werden, ist das korrekt?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo. Ja, das ganze hat sich echt verwurschtelt.
Bis jetzt konnte das erst mal so laufen. Aber nach und nach leuchten so die die Dinge auf, hatte damit auch vorher noch keine Berührung.
Und das mit den Net. C++ DLL's das diese anders zu behandeln sind, ja, muss man wissen. Aber dann geht es erst mal immer noch nicht (bei mir, aber denke das liegt an mir).
Ich würde das ganze schon gerne richtig verstehen, ich denke ich bin da auch schon näher dran.

Punkt 1:
- Die DLL's (in meinem Fall Net. C++-Dll's ins Projekt in differenzierte Ordner ablegen. Mit Differennziert meine ich, im Projektmappenexplorer zwei Verzeichnisse anlegen, klassischerweise mit x86 und x64 (hat den Vorteil das man später mit den Conditions vonMSBuild zu arbeiten). Die DLL's darin ablegen (in der Regel haben die auch den identischen Namen)

Punkt 2:
- Handelt es sich wie in meinem Fall um die Net. C++ - DLL / DLL's, dann muss das Projekt in der Konfiguration für x86 und x64 ausgerichtet werden (einstellen), indiesem Fall auch "AnyCPU" entfernen

Punkt 3:
- Es muss die CSPROJ-Datei vom Projekt (Hauptprojekt) angepasst werden, mit den MSBUILD-Conditions. Ich denke hier liegt jetzt das Problem, ich schreibe auch hier erst mal nicht mehr dazu, bevor das Problem gelöst ist. Wenn das bei mir funktioniert, werde ich den Prozess mal genau beschreiben, falls auch noch andere so dappig wie ich sind


Habe das mal bis Punkt 3 beschrieben. In der CSPROJ die ich editiert habe, kann ich mir nicht erklären was genau falsch laufen soll. Ich habe zusätzlich zwei <ItemGroup> angelegt, in denen ich die Plattformeinstellung kontrolliere, dementsprechen sollen die DLL's gezogen werden.

Wenn ich aber das Projekt starte, in der VStudiooberfäche x86 oder x64 einstellen, dann bringt die Umgebung viele Fehler "Typ ooder Namespace "SAP" wurde nicht gefunden, und in der Datei sind sämtliche Klassen, Eigenschaften rot unterkringelt, und in der Fehlerliste wird ausgegeben das eine using-Direktive oder der Assemblyverweis fehlt.

Was mir noch aufgefallen ist:
- Warum steht in der CSPROJ ganz oben noch ein Eintrag mit "AnyCPU", die habe ich entfernt, das kann nur noch bei der "Zielplattform" in Projekt-Eigenschaften-Build eingestellt werden.
- In den beiden <ItemGroup> habe ich keine Condition für DEBUG oder RELEASE, habe es aber mit und ohne die Zusätzliche Condition geändert, macht keinen Unterschied.

So, jetzt habe ich eine Menge geschrieben, evenntuell kann das Problem analysiert werden ...

Also ich sehe jetzt den Fehler vorerst nicht, was ich falsch gesetzt habe. Ich stelle hier nochmal die CSPROJ ein:


<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{8CBB9BA6-BCF3-476A-BDBA-005913EA9A0E}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>SapZeichnungsViewer</RootNamespace>
    <AssemblyName>SapZeichnungsViewer</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>
    </DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <NoWarn>0168</NoWarn>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>
    </DefineConstants>
    <Optimize>false</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup>
    <StartupObject>
    </StartupObject>
  </PropertyGroup>
  <PropertyGroup />
  <PropertyGroup>
    <SignAssembly>false</SignAssembly>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <PlatformTarget>x86</PlatformTarget>
    <OutputPath>bin\x64\Debug\</OutputPath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <PlatformTarget>x64</PlatformTarget>
    <OutputPath>bin\x64\Release\</OutputPath>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Xaml" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="MainWindow.xaml.cs">
      <DependentUpon>MainWindow.xaml</DependentUpon>
    </Compile>
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Zusatzklassen\ECCDestinationConfig.cs" />
    <Compile Include="Zusatzklassen\SAPFunctions.cs" />
    <Compile Include="SapViewerMethods.cs" />
    <Compile Include="Zusatzklassen\Tools.cs" />
    <Compile Include="Zusatzklassen\ViewFiles.cs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="PDFsharp-MigraDoc-GDI">
      <Version>1.51.5186-beta</Version>
    </PackageReference>
    <PackageReference Include="System.ValueTuple">
      <Version>4.5.0</Version>
    </PackageReference>
  </ItemGroup>
  
  <!-- Start - eingefügte ItemGroups -->
  
  <ItemGroup Condition="'$(Platform)' == 'x64'">
    <Content Include="Zusatzklassen\x64\sapnco.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Zusatzklassen\x64\sapnco_utils.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup Condition=" '$(Platform)' == 'x86'">
    <Content Include="Zusatzklassen\x86\sapnco.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="Zusatzklassen\x86\sapnco_utils.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="App.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  
  <!-- Ende - eingefügte ItemGroups -->
  
  <!-- <ItemGroup> -->
  <!-- <Content Include="App.config"> -->
  <!-- <CopyToOutputDirectory>Always</CopyToOutputDirectory> -->
  <!-- </Content> -->
  <!-- <Content Include="Zusatzklassen\x64\sapnco.dll"> -->
  <!-- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> -->
  <!-- </Content> -->
  <!-- <Content Include="Zusatzklassen\x64\sapnco_utils.dll"> -->
  <!-- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> -->
  <!-- </Content> -->
  <!-- <Content Include="Zusatzklassen\x86\sapnco.dll"> -->
  <!-- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> -->
  <!-- </Content> -->
  <!-- <Content Include="Zusatzklassen\x86\sapnco_utils.dll"> -->
  <!-- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> -->
  <!-- </Content> -->
  <!-- </ItemGroup> -->
  
  
  <ItemGroup>
    <Page Include="MainWindow.xaml">
      <SubType>Designer</SubType>
      <Generator>MSBuild:Compile</Generator>
    </Page>
  </ItemGroup>
  <ItemGroup>
    <None Include="Doc-SapZeichnungsViewer.docx" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\AdditionalFuncs\AdditionalFuncs.csproj">
      <Project>{86b31f9e-ef5b-46b0-8559-b4a5043dffd3}</Project>
      <Name>AdditionalFuncs</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup />
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Also, ohne groß auszuholen.
Ich habe versucht das in der CSPROJ einzubinden, das bei unterschiedlicher Prozessorarchitektur (x86/x64).

Schritt 1:
Habe dem Projekt bei den Verweisen die beiden DLL's als x64 eingebunden.
Dann habe das Projekt gestartet, einmal als "AnyCPU" und einmal als "x64" laufen lassen.
Beides mal hat es funktioniert.

Habe ich "x86" angewählt,dann ging es nicht.

Aktueller Aufbau der "CSPROJ":


<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{8CBB9BA6-BCF3-476A-BDBA-005913EA9A0E}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>SapZeichnungsViewer</RootNamespace>
    <AssemblyName>SapZeichnungsViewer</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>
    </DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>
    </DefineConstants>
    <Optimize>false</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup>
    <StartupObject>SapZeichnungsViewer.App</StartupObject>
  </PropertyGroup>
  <PropertyGroup />
  <PropertyGroup>
    <SignAssembly>false</SignAssembly>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\AnyCPU\Debug\</OutputPath>
    <DebugType>full</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <NoWarn>0168</NoWarn>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <OutputPath>bin\AnyCPU\Release\</OutputPath>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup>
    <NoWin32Manifest>true</NoWin32Manifest>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="sapnco">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco.dll</HintPath>
    </Reference>
    <Reference Include="sapnco_utils">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco_utils.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Xaml" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="App.xaml.cs">
      <DependentUpon>App.xaml</DependentUpon>
    </Compile>
    <Compile Include="MainWindow.xaml.cs">
      <DependentUpon>MainWindow.xaml</DependentUpon>
    </Compile>
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Zusatzklassen\ECCDestinationConfig.cs" />
    <Compile Include="Zusatzklassen\SAPFunctions.cs" />
    <Compile Include="SapViewerMethods.cs" />
    <Compile Include="Zusatzklassen\Tools.cs" />
    <Compile Include="Zusatzklassen\ViewFiles.cs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="PDFsharp-MigraDoc-GDI">
      <Version>1.51.5186-beta</Version>
    </PackageReference>
    <PackageReference Include="System.ValueTuple">
      <Version>4.5.0</Version>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <Content Include="App.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <ApplicationDefinition Include="App.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </ApplicationDefinition>
    <Page Include="MainWindow.xaml">
      <SubType>Designer</SubType>
      <Generator>MSBuild:Compile</Generator>
    </Page>
  </ItemGroup>
  <ItemGroup>
    <None Include="Doc-SapZeichnungsViewer.docx" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\AdditionalFuncs\AdditionalFuncs.csproj">
      <Project>{86b31f9e-ef5b-46b0-8559-b4a5043dffd3}</Project>
      <Name>AdditionalFuncs</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Schritt 2:
Ich habe die "CSPROJ" abgeändert, damit auch die "32-Bit"-Variante passen soll. Aber macht eigentlich keinen Sinn wenn das "managed" ist.
Bei den Verweisen habe ich nichts verändert.
"x64 / AnyCPU" läuft, aber "x86" nicht, Fehlermeldung liegt bei.

Hier die abgeänderte CSPROJ-Datei (neuer Teil ist gekennzeichnet):

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{8CBB9BA6-BCF3-476A-BDBA-005913EA9A0E}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>SapZeichnungsViewer</RootNamespace>
    <AssemblyName>SapZeichnungsViewer</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
    <TargetFrameworkProfile>
    </TargetFrameworkProfile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>
    </DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>
    </DefineConstants>
    <Optimize>false</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup>
    <StartupObject>SapZeichnungsViewer.App</StartupObject>
  </PropertyGroup>
  <PropertyGroup />
  <PropertyGroup>
    <SignAssembly>false</SignAssembly>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\AnyCPU\Debug\</OutputPath>
    <DebugType>full</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <NoWarn>0168</NoWarn>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <OutputPath>bin\AnyCPU\Release\</OutputPath>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup>
    <NoWin32Manifest>true</NoWin32Manifest>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="sapnco">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco.dll</HintPath>
    </Reference>
    <Reference Include="sapnco_utils">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco_utils.dll</HintPath>
    </Reference>
	
	<!-- START - Neu eingstellt -->
	
	<Reference Include="sapnco, version=3.0.0.42, culture=neutral, publickeytoken=50436dca5c7f7d23, processorarchitecture=x64">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco.dll</HintPath>
    </Reference>
    <Reference Include="sapnco_utils, version=3.0.0.42, culture=neutral, publickeytoken=50436dca5c7f7d23, processorarchitecture=x64">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco_utils.dll</HintPath>
    </Reference>
	
	<!-- ENDE - Neu eingstellt -->
	
	<Reference Include="sapnco">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco.dll</HintPath>
    </Reference>
    <Reference Include="sapnco_utils">
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco_utils.dll</HintPath>
    </Reference>
	
	
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Xaml" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="App.xaml.cs">
      <DependentUpon>App.xaml</DependentUpon>
    </Compile>
    <Compile Include="MainWindow.xaml.cs">
      <DependentUpon>MainWindow.xaml</DependentUpon>
    </Compile>
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Zusatzklassen\ECCDestinationConfig.cs" />
    <Compile Include="Zusatzklassen\SAPFunctions.cs" />
    <Compile Include="SapViewerMethods.cs" />
    <Compile Include="Zusatzklassen\Tools.cs" />
    <Compile Include="Zusatzklassen\ViewFiles.cs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="PDFsharp-MigraDoc-GDI">
      <Version>1.51.5186-beta</Version>
    </PackageReference>
    <PackageReference Include="System.ValueTuple">
      <Version>4.5.0</Version>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <Content Include="App.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <ApplicationDefinition Include="App.xaml">
      <Generator>MSBuild:Compile</Generator>
      <SubType>Designer</SubType>
    </ApplicationDefinition>
    <Page Include="MainWindow.xaml">
      <SubType>Designer</SubType>
      <Generator>MSBuild:Compile</Generator>
    </Page>
  </ItemGroup>
  <ItemGroup>
    <None Include="Doc-SapZeichnungsViewer.docx" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\AdditionalFuncs\AdditionalFuncs.csproj">
      <Project>{86b31f9e-ef5b-46b0-8559-b4a5043dffd3}</Project>
      <Name>AdditionalFuncs</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Hilft das weiter?
Kann das Problem sein:
- Muss ich was in der PropertyGroup machen, anstatt in der ItemGroup ??
- Muss ich bei den Verweisen was anders machen ??
- Muss ich eigentlich nur "AnyCPU" verwenden, oder geht das nicht weil die beiden DLL's eventuell C++-DLL's sind ??

Kann ich sonst noch eine Info geben??

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo gfoidl, habe mir das geerade runtergeladen und angesehen.
Die beiden DLL's sind ja managed, aber wie du sagst wohl in C++. Das heißt ic nehme die "NetFull"-Variante (hbe FW 4.0 in Verwendung), oder egal, das unterstützt noch alle Frameworks, korrekt?
Ich binde die beiden DLL's ein und mache in der App.xamls.cs die Auswertung auf 32- oder 64-Bit, dazu wir dann die statische Klasse "NativLib" aufgerufen.
In der Klasse definiere ich die DLL doer mehrere DLL's mit der/den Variablennamen denen ich DLL-Namen zuweise.

Wenn ich mehrere DLL's habe, muss ich noch jede DLL anlegen oder wie nennt man das:
==> [DllImport(LibName, EntryPoint = "getBitnessMessage")]

Korrekt?

Ansonsten muss ich im Code nichts machen, alles bleibt wie es war?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hui, das hört sich ja fast noch komplizierter an als das in der CSPROJ-Datei einzutüteln ...
Ist das wirklich einfacher? das habe ich so noch nie gemacht (P/Invoke).
Bleibt im Code auch alles gleich bei beiden Vesionen (x86 oder x64, aber du sagtest ja "AnyCPU" verwenden). Wie rufe ich dann von den DLL's die Methoden auf?
Und wie mache ich das, wenn das Projekt mit ClickOnce veröffentlicht wird. Muss ich dann alle DLL's mit den diversen Bittigkeiten in das Projekt verlinken oder zufügen ?

Dann noch eine Frage. Habe ein Bild von einem der beien DLL-typen gemacht (x86/x64). Wenn ich das richtig verstehe, dann ist das managed DLL, korrekt?
Das heißt dann, das müßte ohen das ganze von oben beschrieben funktionieren?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo gfoidl, genau um das geht es.
Wie mache ich das Projekt auf x86 und x64 lauffähig, wenn es die einzubindenden DLL's als 32- und 64-Bit gibt. Applikation soll auf 32- und 64Bit Betriebsystem laufen, ohne zwei Projekt fahren zu müssen.
Danke.

Thema: ClickOnce Public key token einer installierten Anwendung erfragen
Am im Forum: Rund um die Programmierung

Hallo, hat damit noch keiner Erfahrung gemacht wie man von einer installierten Applikation nachträglich den "PublicKeyToken" bekommen kann?
Das Problem ist, das an manchen rechnern noch eine ältere Version (2 Versionen davor) installiert ist, und ich diese gerne entfernen lassen würde (wenn es klappen würde automatisch).
Aber dazu brauche ich noch diesen Token, und ich denke der ändert sich mit jeder neuen Version. Oder bleibt der immer gleich?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo Abt. Habe mir gestern für das Problem beinahe den ganzen Tag Zeit genommen und mal nachrecherchiert.
Also, ich finde das passende zu finden ist erst mal nicht so einfach, da meistens auch die beschriebenen Dinge englisch verfasst sind. Zudem binich auch nicht der abdolute Informatiker, und bei MS findet man zu diesem Problem auch nicht gerade so viele Beschreibungen.
Also, ich habe mich dann ma an folgenden Link gehalten:
conditionally-use-32-64-bit-reference-when-building-in-visual-studio
Dann habe ich von der Applikation die aus mehreren Projekten besteht, erst mal eines genommen, wo es die DLL's für 32-Bit und 64-Bit gibt. Dieses Projekt handelt die SAP-Anbindung für Zeichnungsbetrachtung ab, die ich für 32-Bit Systeme (WINXP die haben wir noch) und auch 64-Bit Syteme benötige. Der Code der Appliaktion bleibt ja für beide Zustände gleich (ob 32 - oder 64-Bit).
Dann habe ich die beiden DLL's mal versucht einzubinden. Die 64-Bit-Varinate schien zu laufen, aber als ich auf die 32-Bit-Variante zurückgeschalten hab, funktionierte die nicht.
Eingebunden habe ich die folgendermaßen:


<ItemGroup>
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=x64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco.dll</HintPath>
      <Private>True</Private>
    </Reference>
	   <Reference Include="sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x86\sapnco.dll</HintPath>
      <Private>True</Private>
    </Reference>
    <Reference Include="sapnco_utils, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=x64">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x64\sapnco_utils.dll</HintPath>
      <Private>True</Private>
    </Reference>
	 <Reference Include="sapnco_utils, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\DLLS\SapZeichnungen\x86\sapnco_utils.dll</HintPath>
      <Private>True</Private>
    </Reference>

Kann es sein, das hier die "processorArchitecture=x64" falsch ist, und MSIL stehen sollte?

Zudem finde ich verwirrend, wie die genaue Einstellung gemachtr wird, das einmal die "32-Bit" oder "64-Bit" - Erstellung angestoßen wird.
Habe mal noch ein Bild dazugehängt.

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo Abt.
Gibt es eventuell eine Möglichkeit, das gesamte Projekt aus einem Guss zu machen, aber einfach die DLL's dann über die Einstellung von Platform zu steuern? Gibt es da die Möglichkeit, in der *.csprj über die Platform die betreffende DLL zu verwenden?
Falls das möglcih wäre, funktioniert aber die Installation mit ClickOnce auch noch?

Hintergrund der Frage. Ich hätte somit den geringeren Aufwand und muss nicht 2 Projekte pflegen.

Thema: ClickOnce Public key token einer installierten Anwendung erfragen
Am im Forum: Rund um die Programmierung

Hallo Community, hat jemand eine Ahnung, wie ich von einer installierten Applikation (wurde mit ClickOnce installiert) den "Public key token" abfragen kann?
Bräuchte den um eine Deinstallation anzustarten, hatte da etwas imNetz gefunden:


how-to-initiate-an-uninstall-of-a-clickonce-app-from-within-the-app


For the crazy or desperate, reflection to the rescue! Replace the "X"s with your app's .application file name (not path) and public key token.
Tested on Windows 10 only.


 var textualSubId = "XXXXXXXXXXXXXXXXXX.application, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX, processorArchitecture=amd64";

        var deploymentServiceCom = new System.Deployment.Application.DeploymentServiceCom();
        var _r_m_GetSubscriptionState = typeof(System.Deployment.Application.DeploymentServiceCom).GetMethod("GetSubscriptionState", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

        var subState = _r_m_GetSubscriptionState.Invoke(deploymentServiceCom, new[] { textualSubId });
        var subscriptionStore = subState.GetType().GetProperty("SubscriptionStore").GetValue(subState);
        subscriptionStore.GetType().GetMethod("UninstallSubscription").Invoke(subscriptionStore, new[] { subState });


Hope this helps someone.


Nun würde ich gerne testen ob das klappt, aber leider brauche ich den "Public key token ".
Hat schon mal jemand so etwas gemacht?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo, so ich nun wieder.
Habe mit den DLL's nochmal rumgespielt und auch die neue von SAP gezogen. Leider keine Veränderung.

Nun habe ich aber noch ein Projekt, das in einer anderen Appliaktion verwendet wird. Da ist folgendes zugange:
Für das Projekt hatte ich nur Basis-DLL's die in VB eingebunden werden konnten. Also, was habe ich gemacht, ein VB-Projekt, habe meien Grundmethoden in VB programmiert, und verwende das ganze nun in einem C#-Projekt.

Das VB-Projekt war bisher immer mit x86 eingestellt, das C#-Hauptprojekt (Hauptapplikation) auch. Jetzt habe ich die C#-Hauptapplikation auf AnyCPU gestellt, dann bekomme ich die Meldung:
"An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)"

Stelle ich das VB-Projekt auf AnyCPU kommt das auch.
Wo leigt nun das Problem? Müssen die Basis-DLL's vom VB-Projekt eine bestimmte Konfiguration haben, wenn ja wie kriege ich das raus?

Oder könnte es sein, weil ich Mehthoden im VB-Projekt mit Interger-Rückgabewerten versehen habe die mit der Typisierung "Int32" definiert sind?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Danke für T-Virus für die Antwort.
Das mit der DLL hat mti SAP zu tun, das habe ich von einem externen Kollegen bekommen, darinsind Anmeldemethodik und Abfragemethodik enthalten. Da ist eine mit X86 wohl erstellt, die aber dann in meiner Hauptanwendung (wenn diese auf "Any CPU" eingestellt ist) nicht läuft. Ist die Hauptanwendung mit "X86" eingestellt, dann kein Problem.
Das war das Problem zu der DLL.
Erstellt ist alles in FW 4.0.

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo Abt, ist schon wieder ein bischen her, aber habe aus dem einen Projekt eine EXE erstellt, mit Übergabeargumenten versehen (bei Programmstart zur Steuerung).
Das funktioniert, kann diese dann aus einerHaptanwendung die z.B. mit "Any CPU" kinfiguriert ist aufrufen und laufen lassen.
Verwende dich die DLL der Applikation, dann geht das nicht (eine SAP-DLL ist wohl nur für X86 ausgelegt, die bekomme ich nicht anders her).

Also würde das mit der EXE soweit funktionieren. Diese rufe ich dann mit "Process.Start" in meiner Applikation auf.

Dazu hätte ich noch einer Frage: Gibt es eine Möglichkeit, bei "Process.Start" einen Rückgabewert aus der aufgerufenen EXE auszuwerten, um dann in der Haupapplikation zu entscheiden, ob die EXE-Ausführung das was sie machen soll auch machen konnte.

Die EXE ruft Daten aus einer Applikation ab. Mißlint dies, gibt die Anwendung "FALSE" zurück. Kann ich die in "Process.Start" auswerten? Da gibt es etwas, aber scheint aber nicht genau das zu tun.

Ich weiss, das ist nicht der korrekte Weg, aber ich muss mit da jetzt erst mal so behelfen.

Thema: Inhalt von CHM-Datei auslesen / erfassen
Am im Forum: Rund um die Programmierung

Danke mal für den ersten Tipp, das ist schon mal was

Thema: Inhalt von CHM-Datei auslesen / erfassen
Am im Forum: Rund um die Programmierung

Hallo Community, folgendes habe ich vor:

Ich möchte aus vorhandenen CHM-Dateien den Inhalt auslesen und in ein anderes Dokument überführen.
Hat jemand von euch schon mal so etwas gemacht?

Habe auf anhieb dazu noch nichts gefunden. Würde das gerne in C' einlesen und dann nach Word oder in eine Textdatei überführen.

Hintergrund: Die bisherigen Dokumente der CHM-Dateien sind nicht mehr vorhanden, und alles manuell aus den CHM herauszukopieren ist sehr zeitaufwendig.
Hat jemand einen Tipp?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo, habe gerade an dem Projekt nochmal getestet.
Was dazu sagen kann: Bei manchen Arbeitsplätzen läuft noch eine Software mit Simulation, die ist auch als 32-Bit installiert, die braucht auch heftig RAM. Bei diesen Arbeitsplätzen passiert auch der Absturz, da ist der RAM auch sehr ausgenutzt (haben 16 GB RAM, aber 32-Bit kann das ja nicht nutzen). Wenn nun beide Applikationnen sehr RAM-durstig sind, dann kämpfen die um die gleichen Speicherzellen bis 4.2 GB, oder? Darüber kommen die Anwendungen ja nicht ran, wegen 32-Bitgrenze.

Dann noch eine andere Frage: Wenn ich eine Applikation habe die aus mehren Projekten zusammen besteht, und die Hauptapplikation (Startprojekt) wird mit Target "x64" eingestellt, dann müssen ja alle anderen Projekte in der Applikation auch auf "x64" eingestellt sein, korrekt ?? Ist ein Projekt auf "x32", dann funktioniert die Applikation nicht, korrekt?

Folgende Überlegung: Meine Applikation besteht aus 10 Projekten. 8 Projekte sind relativ keline brauchen wenig RAM, zwei Projekte können aber schon relativ viel Speicher brauchen.
Wäre es möglich, das ich diese beiden speicherhungrigen Projekte als EXE erstelle und dann von meiner Applikation aben starte? Dann könnte diese als 64-Bit laufen, alles andere bleibt wie gehabt ?? Und das hätte den Vorteil, das ich dann von WinXP diese zwei speicherhungringen Projekte auch als 32-Bit aufrufen könnte, und das somit auf WinXP noch läuft (Anmerkung: auf den WinXP-rechner läuft keine andere Ramdurstige Anwendung).

Wäre das ein Weg?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung

Hallo Abt, danke für die Info. Der Beitrag liegt schon etwas zurück, aber habe mich erst heute damit beschäftigt.
Also, wenn ich das richtig verstehe, dann muss ich die Applikation jeweils wür 32-Bit-Systeme und für 64-Bit-Systeme erstellen.
Die Anwender müssen dann entscheiden, was sie installieren (je nach Windows-Version, bei uns gibt es noch XP ;-)

In der Applikation kann ich nicht entscheiden, welche DLL geladen werden soll? Sonst könnte man ja bestimmt die Architektur abfragen?

Ja, gfoidl meint ja das etwas mit dem GC nicht stimmt. OutofMemory-Ex ist schon aufgetreten. Ich denke da wo das hauptsächlich passiert, die nutzen noch eine andere RAM-lüsterne Applikation da diese auch Simulationen durchführt, und diese ist als 32-Bit aktiv.
Wie kann ich das nachsehen, im Taskmanager, sehen was sich die Appliaktionen an RAM greifen?

Thema: In Applikation alternativ 32-bit oder 64-bit DLL verwenden
Am im Forum: Rund um die Programmierung


Hallo Community, sorry, bestimmt gibt es dazu schon einen Eintrag im Forum, habe aber mit der Suche keine Treffer finden können.
Kann man eigentlich mit Jokerzeichen suchen lassen? Jetzt aber zum eigentlichen Thema.

Ich habe eine Applikation, die wurde um einen Dokumentenansicht erweitert. Und zwar wird da eine externes System angezapft, dass mir dann die Dokumente per Filetransfer liefert.

Nun ist es so das ich dazu eine DLL bekommen habe, die mit 32-Bit Architektur erstellt ist.
Meine Applikation war auf ANY-CPU eingestellt, das heißt ja das diese selbständig bei der Installation für 64- oder 32-Bitsystem entschieden wird.
Nun habe ich die Applikation komplett auf Zielplattform 32-Bit gestellt.

Nun habe ich den Eindruck, dass die Appliaktion nun öfters abschmiert, weil diese Appliaktion sehr viele Daten vom SQL-Server saugt, unsere CAD-Programmierer mit ihren Tools auch schon viel Arbeitsspeicher brauchen und so die Ressourcen knapp werden.

Dazu kommt, dass diese Appliaktion auch noch auf WINXP laufen soll, damit haben wir noch ausgerüstete Maschinen, auf denen die Applikation läuft (da halt mit 32-Bit, deshalb waren alle eingebundenen Projekte der Applikation mit Zielplattform AnyCPU eingestellt).

Diese ganze Applikation verteile ich per ClickOnce.

Nun meine Frage, gibt es eineMöglichkeit wie ich das steuern kann ob die DLL mit 32-Bit oder 64-Bit verwendet werden soll, und das ganze weiterhin als eine einzige Appliaktion mit ClickOnce zu verteilen?

Thema: Ausgabeinformationen zur Methode und Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, danke für die Info.
Ja, der StackTrace ist eigentlich genau das was ich brauche, um genau zu wissen wo es im Code kracht.
Danke der Info.

Thema: Ausgabeinformationen zur Methode und Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, danke erst mal.
Also ich will jetzt nicht gerade mit einem Schlachtschiff auffahren.
Aber in den Try...Catch - Exceptions , wenn eine Ausnahme auftritt werte ich diese aus und gebe die Infos aus, damit man nachvollziehen kann was passiert ist und wo.
Da meine Frage:
- Kann ich der Exception irgendwo entlocken, in welcher Klassenmethode der Error passiert
- In welcher Zeile das passiert ist

damit ich diese Infos sinnvoll als Infostring ausgeben kann??

Thema: Ausgabeinformationen zur Methode und Klasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, eine Frage die mich immer wieder mal beschäftigt, wenn ich Fehlerinfos ausgeben in einem Try..Catch.

Gibt es da eigentlich irgendwo eine Angabe in der Exception, die ich gezielt abfragen kann in welcher Klasse und Methode, Zeile der Zwischenfall passiert ??
Bisher gebe ich immer die Methode noch genau an, um den Fehler schnell nachvollziehen zu können.

Oder gibt es da noch andere Hulfsmittel (Kennzeichnung von Methoden mit bestimmten Attributen ...) ??
Über eine Info wäre ich dankbar.

Thema: Visual Studio App.Config aus eingebundenen Projekten werden nicht veröffentlicht
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Es hat funktioniert.
Es müssen lediglich die Kofigurationsdateien der einzelnen Projekt in das Hauptverzeichnis der Hauptanwendung (Hauptprojekt) gelinkt werden (bei Hinzufügen, den kleinen Pfeil am Dialogbutton klicken, dort ist "als Verweis hinzufügen). Dann werden diese *.dll.config oder *.exe.config bei ClickOnce in das ApplicationVerzeichnis auf dem Server übertragen.

Ach ja, ganz wichtig ist noch, das dann die Eigenschaften der verlinketen Konfigs im Hauptverzeichnis noch folgende Einstellung bekommen:
- Buildvorgang: "Immer"
- In Ausgabeverzeichnis kopieren: "Immer" oder "immer wenn neuer"

==> Diese Einstellungen sind zu finden wenn man die Verlinkte Datei im Hauptprojektverzeichnis von VisualStudio anklickt, dann mit rechter Maustaste auf Eigenschaften.
So, das wars.

Thema: Visual Studio App.Config aus eingebundenen Projekten werden nicht veröffentlicht
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)


Hallo, habe folgendes Problem.
Habe eine Projektmappe mit mehreren Projekten.
Einige Projekte haben eine eigene Konfigurationsdatei "Applikation.config.exe".
Leider wird aber nur die vom Hauptprojekt mitgegeben, die anderen fehlen (werden nicht mit ClickOnce veröffentlicht).
Muss ich die Konfiguratinsdateien irgendwie verlinken, oder wie macht man das? Oder gibt es dafür sonstige Einstellungen?

Thema: Wie mit einer Linq-Abfrage alle Datensätze mit einer bestimmten Spalte ausgeben lassen?
Am im Forum: Datentechnologien

Hallo Th69, wennich das ganze sofort als DataTable hätte wäre das gut, ich müßte das Ergebnis als DataTable weitergeben.
Geht das nun, das ich die Abfrage mit der Tabelle mache, und davon mit LinQ nur die eine Spalte mit Daten weitergeben

Ansosnten müßte ich halt das Ergebnis einer DataTable zuweisen.

Thema: Wie mit einer Linq-Abfrage alle Datensätze mit einer bestimmten Spalte ausgeben lassen?
Am im Forum: Datentechnologien

Hallo, ich möchte aus einer SQL-Tabelle alle Datensätze ausgeben lassen, aber nur mit der Spalte "Bestellname".

Wie mache ich das, habe da schon rumprobert, krieg es aber nicht hin, weil man noch umwandeln muss (Compilerfehler CS0029).



DataRow[] rowsExcel = tblExcelDaten.AsEnumerable().Where(x => x["Info"].ToString() == "Keine Bestellnummer").CopyToDataTable().AsEnumerable().Select(x => x.Field<string>("Bestellname")).Distinct().ToArray();

Wie mache ich das richtig?

Thema: FindFamilyName wirft ConvertHresultToException auf nur einer Maschine
Am im Forum: GUI: WPF und XAML

Hallo, das Problem konnte ich lösen.
Hatte zuerst den Dienst aktiviert, Schriftcachedatei gelöscht, und dann die Applikation nochmals gestartet, das war aber ohne Erfolg.

Erst als ich den Grafikkartentreiber erneut installieren lies, hat es funktioniert. Das steht aber auch so in dem Link von MrSparkle.
Danke für die Hilfe ;-)

Thema: FindFamilyName wirft ConvertHresultToException auf nur einer Maschine
Am im Forum: GUI: WPF und XAML

Hallo, ich habe mal überall wo ich "Courier New" als Schriftart setze, eine try...catch eingefügt.
Ohne Erfolg.

Dann habe ich die Schriftart gegen "Arial" getauscht, gleiches Problem.
Was nun?

Thema: FindFamilyName wirft ConvertHresultToException auf nur einer Maschine
Am im Forum: GUI: WPF und XAML

Hallo liebe Community, seit gestern habe ich ein Problem mit einem WinXP-Rechner. Meine Applikation (läuft auf WinXp / Win7 / Win10 rechnern) bockt an dieser einen Maschine. Alle anderen laufen, auch die anderen WinXP-Rechner. Problem ist, das ich auch kein Remotedebugging machen kann, weil die Maschine so abgesichert ist und unsere IT das nicht zulässt. Ich habe mich nun Schritt für Schritt mit veränderten Debugversionsständen und MessageBox-Ausgabe durchgehangelt, ob soweit irgendwo ein Bug ist, habe aber nichts gefunden. Mit scheint so, sobald die Appliaktion das Hauptfenster darstellen soll, geht was schief. Ich habe zur Sicherheit die Debugversion mit den einzelnen Ausgabemeldungen auch noch auf einer anderen Maschine mit WinXP laufen lassen, die hat dort auch funktioniert.

Der Fehlermeldung nach würde ich denken dass etwas mit den Schriftarten nicht passt. Ich poste hier nun mal die komplette Fehlermeldung, eventuell hat jemand eine Idee, was das nicht genau passt.
Entwickelt wurde die Applikation auf FW 4.0 Client Profile.

Hier die Meldung:


Fehler
Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))
----------------------------------
mscorlib
----------------------------------
Void ThrowExceptionForHRInternal(Int32, IntPtr)
----------------------------------
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode, IntPtr errorInfo)
at MS.Internal.Text.TextInterface.Native.Util.ConvertHresultToException(Int32 hr)
at MS.Internal.Text.TextInterface.FontCollection.FindFamilyName(String familyName, UInt32& index)
at MS.Internal.FontCache.FamilyCollection.LookupFamily(String familyName, FontStyle& fontStyle, FontWeight& fontWeight, FontStretch& fontStretch)
at System.Windows.Media.FontFamily.LookupFontFamilyAndFace(CanonicalFontFamilyReference canonicalFamilyReference, FontStyle& style, FontWeight& weight, FontStretch& stretch)
at System.Windows.Media.FontFamily.FindFirstFontFamilyAndFace(FontStyle& style, FontWeight& weight, FontStretch& stretch)
at System.Windows.Media.Typeface.ConstructCachedTypeface()
at System.Windows.Media.Typeface.get_CachedTypeface()
at System.Windows.Media.Typeface.CheckFastPathNominalGlyphs(CharacterBufferRange charBufferRange, Double emSize, Double scalingFactor, Double widthMax, Boolean keepAWord, Boolean numberSubstitution, CultureInfo cultureInfo, TextFormattingMode textFormattingMode, Boolean isSideways, Boolean breakOnTabs, Int32& stringLengthFit)
at MS.Internal.TextFormatting.SimpleRun.CreateSimpleTextRun(CharacterBufferRange charBufferRange, TextRun textRun, TextFormatterImp formatter, Int32 widthLeft, Boolean emergencyWrap, Boolean breakOnTabs)
at MS.Internal.TextFormatting.SimpleRun.Create(FormatSettings settings, CharacterBufferRange charString, TextRun textRun, Int32 cp, Int32 cpFirst, Int32 runLength, Int32 widthLeft, Int32 idealRunOffsetUnRounded)
at MS.Internal.TextFormatting.SimpleTextLine.Create(FormatSettings settings, Int32 cpFirst, Int32 paragraphWidth)
at MS.Internal.TextFormatting.TextFormatterImp.FormatLineInternal(TextSource textSource, Int32 firstCharIndex, Int32 lineLength, Double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak, TextRunCache textRunCache)
at MS.Internal.TextFormatting.TextFormatterImp.FormatLine(TextSource textSource, Int32 firstCharIndex, Double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak, TextRunCache textRunCache)
at System.Windows.Controls.TextBlock.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.DockPanel.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Border.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Control.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.WrapPanel.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
at System.Windows.Controls.ItemsPresenter.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Border.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Control.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
at System.Windows.Controls.ScrollContentPresenter.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.ScrollViewer.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV)
at System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV)
at System.Windows.Controls.Grid.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Documents.AdornerDecorator.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Controls.Border.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Window.MeasureOverrideHelper(Size constraint)
at System.Windows.Window.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.Interop.HwndSource.SetLayoutSize()
at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)
at System.Windows.Interop.HwndSource.set_RootVisual(Visual value)
at System.Windows.Window.SetRootVisual()
at System.Windows.Window.SetRootVisualAndUpdateSTC()
at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)
at System.Windows.Window.CreateSourceWindow(Boolean duringShow)
at System.Windows.Window.CreateSourceWindowDuringShow()
at System.Windows.Window.SafeCreateWindowDuringShow()
at System.Windows.Window.ShowHelper(Object booleanBox)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

Thema: Rückstufung von .Net Standard 2.0 auf 1.3 weil FW 4.6.1 auf einer Maschine nicht verfügbar ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke für die Info. Der SQ-Hersteller soll nun erst mal prüfen, ob 4.6.1 installiert werden kann (sollte ja eigentlich dann so sein wenn das side by side ist. Habe noch an zwei anderen Maschinen nachgesehen, dort ist 4.7.1 und 4.6.1 installiert wobei ein System W7 und das andere W10 ist.
Danke nochmals.