Laden...

Verweise in reinen csproj-Projekten

Erstellt von EyckBlank vor einem Jahr Letzter Beitrag vor einem Jahr 954 Views
E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr
Verweise in reinen csproj-Projekten

Hallo,
Habe ein reines "csproj"-Projekt, keine "sln"-Solution zur Arbeit mit Excel aus Altbeständen.
Nach Umzug mit VS Community 2019 auf einen anderen Rechner kann ich dieses Projekt nicht mehr compilieren, da ein Assembly-Verweis fehle.
Dieses ist die Compiler-Fehlermeldung:

Fehlermeldung:
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Fehler CS0234 Der Typ- oder Namespacename "Office" ist im Namespace "Microsoft" nicht vorhanden. (Möglicherweise fehlt ein Assemblyverweis.)
Q:\ESAPI\Projects\EB_EC_Check bisher lauffähig\EB_EC_Check.csproj Q:\ESAPI\Projects\EB_EC_Check bisher lauffähig\EB_EC_Check.cs 21

Habe im Internet gesucht und gefunden, dass man mit rechter Maustaste im Solution-Explorer mit Verweise hinzufügen das Problem beheben könne.

Nur - da es sich um ein reines csproj-Projekt handelt, gibt es im Solution-Explorer kein Verweise... und kein NuGet…
Diese Verweise... und Nuget… kenne ich nur aus "sln"-Solutions.

Kennt jemand diese (beiden) Probleme ?
Und weiss jemand, wie ich da vielleicht heraus komme ?

VD + VG
EyckBlank

PS Habe mal einen Screenshot angehangen.

4.931 Beiträge seit 2008
vor einem Jahr

Laß dir mal im "Projektmappen-Explorer" (engl. "Solution Explorer") die Projektansicht anzeigen (anstatt der Ordneransicht).

Der Fehler kommt, weil die zugehörige Office-Assembly beim Kompilieren nicht eingebunden werden konnte und damit auch der Namensbereich "Microsoft.Office" nicht vorhanden ist.
Ich nehme an, auf dem neuen Rechner ist nicht mehr die passende Office-Version (oder gar kein Office) installiert, so daß der Assembly-Verweis nicht gefunden werden kann (s. gelbe Warnungen).

Schau dir auch mal NetOffice an (damit du nicht an eine konkrete Office-Version gebunden bist).

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Erst mal herzlichen Dank für die Antwort!

Ich rieche da förmlich etwas. Irgendwie hatte ich auf dem alten Rechner auch dieses Problem und konnte dieses aber mit Umschalten (von irgend etwas) lösen.
Nur dieses Umschalten finde ich nicht mehr.
Wo würden Sie zwischen den Ansichten umschalten?
Im Solution-Explorer ist ein Haus-Symbol. Ich dachte das Symbol rechts daneben sei es, aber das geht nicht wie erhofft.

By the way, auf diesem Rechner läuft eine ziemlich aktuelle Version von Excel (2016).

VD
EyckBlank

4.931 Beiträge seit 2008
vor einem Jahr

Doch es sollte das Symbol rechts vom Haus sein: "Zwischen verschiedenen Ansichten wechseln".
Und dann in der Baumansicht den ".sln"-Eintrag per Doppelklick wählen (selbst wenn du die ".csproj"-Datei direkt geöffnet hast, erstellt VS immer eine Solution dazu).

16.807 Beiträge seit 2008
vor einem Jahr

By the way, auf diesem Rechner läuft eine ziemlich aktuelle Version von Excel (2016).

Excel 2016 hat schon ein paar Jahre auf dem Buckel. Dazwischen ist 2019 und heute sind wir bei 2021; das nur am Rande.
Spielt aber auch keine Rolle: denn offenbar referenzierst Du auf etwas (vielleicht auf SDK Assemblies => Office Developer Tools?), die halt auf Deinem neuen Rechner nicht existieren.
Sehen wir halt nicht, denn den wichtigsten Teil, die Projektdatei, zeigst nicht. Der Code auf dem Bild ist irrelevant.

Solltest Du NetOffice verwenden wollen, was ein alternativer Weg darstellt, dann persönliche Empfehlung, dass Du Dir den Code von NetOffice regelmäßig sicherst.
Gab in der Vergangenheit (noch zu CodePlex Zeiten von NetOffice) negative Auffälligkeiten des "Erfinders" - und man weiß nie, was da sonst noch so passiert, wenn das einmal passiert ist. (Er nannte sich oft "microschuft" und hat bewusst die Provokation mit dem .NET Ökosystem oder Microsoft Mitarbeiter:innen gesucht, sich komisch, beleidigend und unzuverlässig verhalten - weshalb er dann aus vielen Ökosystemen (inkl. diesem Forum) rausflog.

Solltest Du nur Excel benötigen (weil Du davon sprichst), dann empfiehlt sich eher GitHub - Excel-DNA/ExcelDna: Excel-DNA - Free and easy .NET for Excel. This repository contains the core Excel-DNA library.. Das ist noch aktiv in der Entwicklung und hat auch insgesamt einen besseren Ruf.

NetOffice wird aber meines Wissens nicht mehr entwickelt (gab wohl irgendwie interne Streitigkeiten der Entwickler:innen inkl. Owner-Übergabe etc etc..), und auch Microsoft empfiehlt nicht mehr die Verwendung von .NET mit Office (bzw. VSTO), sondern die JavaScript API.
Daher nur noch eine Frage der Zeit, bis das dann abgekündigt bzw. nicht mehr unterstützt wird.

PS: Fehler (oder die Projektdatei) bitte als Text posten, nicht als Bild.
[Hinweis] Wie poste ich richtig?

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Danke! Das sind ja super Antworten! Ich werde mal gleich alles durchackern. Es werden bestimmt noch viele Fragen dazu kommen.
Bis dahin
HG EyckBlank

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Hallo Th69,
Danke, ich habe aber in der Projektansicht nach einer "sln" gesucht, war aber nichts zu finden.
In der Ordneransicht habe ich ebenfalls nichts gefunden.

Doch es sollte das Symbol rechts vom Haus sein: "Zwischen verschiedenen Ansichten wechseln".
Und dann in der Baumansicht den ".sln"-Eintrag per Doppelklick wählen (selbst wenn du die ".csproj"-Datei direkt geöffnet hast, erstellt VS immer eine Solution dazu).

Im Anhang mal ein Foto von der Ansicht.

VD + HG
EyckBlank

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Hallo und Danke Abt!
Frage, wo finde ich im Code welches Excel und wie ich auf Excel referenziere ?
Diese Stelle würde ich dann gerne posten.

Excel 2016 hat schon ein paar Jahre auf dem Buckel. Dazwischen ist 2019 und heute sind wir bei 2021; das nur am Rande.
Spielt aber auch keine Rolle: denn offenbar referenzierst Du auf etwas (vielleicht auf SDK Assemblies => Office Developer Tools?), die halt auf Deinem neuen Rechner nicht existieren.
Sehen wir halt nicht, denn den wichtigsten Teil, die Projektdatei, zeigst nicht. Der Code auf dem Bild ist irrelevant.

NetOffice von "microshuft" werde ich dann wohl nicht nehmen.

VD + HG
EyckBlank

4.931 Beiträge seit 2008
vor einem Jahr

Dann speichere mal eine ".sln"-Datei ab: Datei / Alles speichern. Oder erzeuge eine neue Solution und füge dein Projekt hinzu.

Edit: NetOffice wird schon seit Jahren von einem anderen Entwickler gepflegt.

16.807 Beiträge seit 2008
vor einem Jahr

Frage, wo finde ich im Code welches Excel und wie ich auf Excel referenziere ?
Diese Stelle würde ich dann gerne posten.

In der csproj.

Deine Fehlermeldung sagt aus, dass Du etwas vergessen hast zu referenzieren, oder dass die Referenz nicht gefunden wird (quasi der Folgefehler).
Kann also auch sein, dass einfach was in der csproj fehlt.

Aber da Du ja der Entwickler bist, musst ja wissen, welche Abhängigkeiten Dein Projekt / Code braucht.

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Hallo Abt,
anbei der Code der csproj


<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x64</Platform>
    <ProjectGuid>{526A21D2-F92A-48B7-AB17-96BEC5A1C005}</ProjectGuid>
    <OutputType>library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>EB_EC_Check</RootNamespace>
    <AssemblyName>EB_EC_Check.esapi</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <PlatformTarget>x64</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>..\..\plugins</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <PlatformTarget>x64</PlatformTarget>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>..\..\plugins</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Microsoft.Office.Interop.Excel, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="office, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Controls.Ribbon" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Xaml">
      <RequiredTargetFramework>4.0</RequiredTargetFramework>
    </Reference>
    <Reference Include="WindowsBase" />
    <Reference Include="PresentationCore" />
    <Reference Include="PresentationFramework" />
    <Reference Include="VMS.TPS.Common.Model.API">
      <HintPath>C:\Program Files (x86)\Varian\RTM\15.6\esapi\API\VMS.TPS.Common.Model.API.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="VMS.TPS.Common.Model.Types">
      <HintPath>C:\Program Files (x86)\Varian\RTM\15.6\esapi\API\VMS.TPS.Common.Model.Types.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="EB_EC_Check.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

"Der Entwickler sagt", da soll Excel (2016) vom Rechner rein.

VD + HG
EyckBlank

16.807 Beiträge seit 2008
vor einem Jahr

Da stehts doch:


    <Reference Include="Microsoft.Office.Interop.Excel, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>

Und so wie das referenziert wird, ist das kein NuGet Paket, sondern eine GAC Referenz (weil Du noch mit .NET Framework unterwegs bist).
Ergo: Du musst dafür sorgen, dass das entsprechende SDK installiert ist, dass das mitbringe - oder auf ein NuGet Paket wechseln (wenn es das denn gibt).

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Super, Danke!
Wo finde ich nun das SDK und wo soll ich dieses installieren?
Vielleicht war das auch der Grund, wieso dieses Programm vorher auf einem anderen Rechner schon lief und erst nach dem Umzug den Dienst versagte !?
Ich hatte damals als blutiger Anfänger einfach drauflos probiert bis es ging und mir die Einzelschritte nicht gemerkt, geschweige verstanden.
Asche auf mein Haupt als "großer C#-Amateur"!

VD + HG
Eyck Blank

PS: ich meine damals irgend etwas in einen GAC Ordner hineinkopiert zu haben...
Was heißt eigentlich GAC ?

Learn by Doing = erst probieren, dann verstehen!

16.807 Beiträge seit 2008
vor einem Jahr

Egal auf welchem C# oder Software Level Du Dich befindest, Google kann jede:r bedienen 🙂

Google Suche nach ".net GAC" => Global Assembly Cache - .NET Framework

Ich hatte damals als blutiger Anfänger einfach drauflos probiert bis es ging und mir die Einzelschritte nicht gemerkt, geschweige verstanden.

Egal was man macht, das ist nie gut.
Quasi selbst schuld. Jetzt musst halt ausprobieren, was das damals war.

Dass Du das von Hand irgendwo in einen Ordner geworfen hast, das machts nun doppelt schwer.

Vielleicht hilft Dir das, irgendwo in den Docs wird schon stehen, was Du brauchst.
https://docs.microsoft.com/en-us/visualstudio/vsto/office-primary-interop-assemblies?view=vs-2022

Learn by Doing = erst probieren, dann verstehen!

Funktioniert bei Spaghetti-Code, selten wenn man was ernsthaft angehen will.

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Gleich zum WE noch weitere Fragen:

Und so wie das referenziert wird, ist das kein NuGet Paket, sondern eine GAC Referenz (weil Du noch mit .NET Framework unterwegs bist).
Ergo: Du musst dafür sorgen, dass das entsprechende SDK installiert ist, dass das mitbringe - oder auf ein NuGet Paket wechseln (wenn es das denn gibt).

Woran erkenne ich, ob es eine NuGet- oder .NET/GAC_Referenzierung ist ?
Was ist der Unterschied und woran erkennt man das im Code des .csproj-File ?

Wenn ich wie in meinem Falle unter Menüpunkt Projekt keinen Nuget- und Verweis-Explorer finde, wie kann ich die Referenzen sonst irgendwie deklarieren ?

Oder mache ist da noch etwas falsch und bekomme deswegen nicht die Sichtbarkeit ?
dazu siehe folgendes:

Laß dir mal im "Projektmappen-Explorer" (engl. "Solution Explorer") die Projektansicht anzeigen (anstatt der Ordneransicht).

Nach Excel SDK für V2016 habe ich gesucht, aber nur für Version 2013 gefunden.

Vielen Dank und vorab ein schönes Wochenende
EyckBlank

16.807 Beiträge seit 2008
vor einem Jahr

Woran erkenne ich, ob es eine NuGet- oder .NET/GAC_Referenzierung ist ?

Du verwendest noch das alte csproj Format, aus .NET Framework. Alle Referenzen hier sind GAC oder Assemblies.
NuGet wird hier in der packages.config gepflegt.

In der neuen .NET Welt (.NET Core und .NET 5+) gibt es ein neues csproj Format; GAC gibt es hier gar nicht mehr.
Assemblies / Projekte werden direkt referenziert, Pakete via PackageReference.

Vielleicht schaust da einfach mal über den Einsteiger und Basics Guide von .NET
zB Identify the project format
Grundlagen zu beherrschen ist immer ganz praktisch, wenn man programmiert 😉

Nach Excel SDK für V2016 habe ich gesucht, aber nur für Version 2013 gefunden.

Ich hab Dir doch sogar den Link gegeben (und das SDK Paket genannt), für die verschiedenen Office Versionen.
Interop gibst sogar nur bis Excel 2016 - weil das eben schon lange (glaub seit 2014) abgekündigt ist bzw. JavaScript die moderne API darstellt.

Google Suche nach "download excel 2016 interop"
Finde ich sofort mehrere Downloads.

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Vielen Dank und ein schönes Wochenende!
EyckBlank

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Danke THh69!

Doch es sollte das Symbol rechts vom Haus sein: "Zwischen verschiedenen Ansichten wechseln".
Und dann in der Baumansicht den ".sln"-Eintrag per Doppelklick wählen (selbst wenn du die ".csproj"-Datei direkt geöffnet hast, erstellt VS immer eine Solution dazu).

Auf dem alten Rechner, glaube ich mich zu erinnern,
war nach Umschalten der Ansicht im Solution-Explorer das komplette Menü unter Projekt sichtbar,
sowie die Möglichkeit, Verweise und Nugets zu editieren.

So habe ich in meinen alten Projekten auf dem alten Rechner, bevor ich WPF konnte, gearbeitet.
Nun tut sich aber nach Umschalten der Ansicht im Solution-Explorer da gar nichts (auf dem neuen Rechner)!
Das hat mich schon gewundert, ich war, ehrlich gesagt, sogar verunsichert und habe an mir selbst gezweifelt!

Auch habe ich auf Deinen Rat nach einer Solution im Projekt gesucht, und keine gefunden.
Wo kann denn die sln-Datei sein, wenn nicht im Projektordner ?

VD + HG
EyckBlank

4.931 Beiträge seit 2008
vor einem Jahr

Wenn nicht im selben Ordener, dann evtl. ein Ordner darüber.

Aber ansonsten, wie schon geschrieben, erstelle einfach selber eine neue Projektmappe (Solution).

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Danke allen, es war eine schwierige Geburt!
Die Lösung war alles andere als offensichtlich!

Erst einmal hatte ich letzte Woche schon den Rat von Th69 befolgt
und mit File / New / Projekt aus vorhandenem Code eine neue Solution mit meinem Code erzeugt.

Dort waren noch eine Menge anderer Fehler, die ich mir nicht erklären konnte.
So erkannte er nicht mal die MessageBox.Show() Zeilen, obgleich using System.Windows.Forms deklariert war.

Nun kommts:
Bei der Neuanlage der neuen "Solution" hat er alle Nuget Bibliotheken rausgeschmissen (Liste leer).
Ich hatte das von unserem Host geforderte Nuget ESAPIX_15_6 installiert, damit verschwand die Erkennbarkeit der MessageBox.Show().
Erst nach Installation des Nuget varian_ESAPI_15_6 war die MessageBox wieder da und alle anderen Fehler auch weg.

VD + HG
EyckBlank

4.931 Beiträge seit 2008
vor einem Jahr

Ich meinte Projekt hinzufügen: "File / Add / Existing Project". Bei "aus vorhandenem Code" erzeugst du ja ein neues Projekt (und damit sind die ganzen Einstellungen, Verweise und NuGet-Packages weg).

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Danke!
So kommt Stück für Stück die Erkenntnis!
VD + HG
EyckBlank

309 Beiträge seit 2020
vor einem Jahr

Nur als kleine Alternative, ich lege/bearbeite Solutions und Projekte eigentlich nur noch per Kommandozeile an:
Finde ich viel intuitiver als das mit VS zu machen, aber ist natürlich geschmackssache 😉

Befehl „dotnet sln“ - .NET CLI

dotnet new sln --name MeinProjekt
dotnet sln add src/Projekt.Core

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Tausend Dank für diesen Tipp!
In Ubuntu arbeite ich nur über Kommandozeile.
Dürfte mir dann nicht so schwer fallen.
Werde nachher mal zur Kommandozeilenbedienung Googlen.

VD + HG
Eyck Blank

16.807 Beiträge seit 2008
vor einem Jahr

Funktioniert bei Dir nicht, weil Du noch mit .NET Framework arbeitest, also alte Welt.
Kommandozeile geht nur in der neuen Welt (die man ohnehin nutzen sollte).

E
EyckBlank Themenstarter:in
24 Beiträge seit 2022
vor einem Jahr

Danke für den Hinweis!
HG EyckBlank