Laden...

msbuild.exe zusammen mit XAML Properties schlägt fehl

Erstellt von dr4g0n76 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.493 Views
dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 5 Jahren
msbuild.exe zusammen mit XAML Properties schlägt fehl

Das Projekt das ich kompilieren will, kompiliert mit VS2017 (devenv.exe) einwandfrei.

Das Projekt soll aber online mit Azure Devops und einem msbuild kompiliert werden.
Um lokal die Fehler, die online auftreten nachzuvollziehen, konnte ich mir bisher so behelfen.

Wenn ich aber versuche mit folgendem script lokal zu kompilieren
(ich befinde mich in dem Ordner in der Command-Line, wo sich auch die sln befindet):

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe" "Projectname.sln" /nologo /nr:false /fl /flp:"logfile=Projectname.sln.log;verbosity=diagnostic" /t:restore /t:compile /p:NoWarn=MC3072 /p:Config=debug /nologo /nr:false

(Das Projekt soll aber online mit Azure Devops und einem msbuild kompiliert werden.
Um lokal die Fehler, die online auftreten nachzuvollziehen, konnte ich mir bisher so behelfen.)

Das wird zwar eigentlich auch alles ausgeführt, nur bekomme ich eben für die XAML Properties in diesem Projekt Fehler.

u.a.:

"C:\Sources\Blub\ProjectName.sln" (restore;compile Ziel) (1) ->
"C:\Sources\Blub\Blub.Management.Handler.Error\Blub.Management.Handler.Error.csproj" (compile Ziel) (13:6) ->
(CoreCompile Ziel) ->
Views\ErrorView.xaml.cs(12,13): error CS0103: Der Name "InitializeComponent" ist im aktuellen Kontext nicht vorhanden. [C:\Sources\Blub\Blub.Management.Handler.Error\Blub.Management.Handler.Error.csproj]

Die XAML Dateien erstelle ich nicht selbst.
Es sieht einfach so aus, als ob mir ein Schalter fehlt, um die Referenzen die die XAML Files enthalten aufzulösen, was ja Devenv.exe anscheinend offensichtlich "von alleine" macht.

Weiss jemand was für einen Schalter ich da bei msbuild.exe noch angeben kann?

P.S.: Würde nicht hier posten, wenn ich nicht schon fast 2 Tage nach der Problemlösung online gesucht hätte + stundenlanges probieren. Vielleicht ist ja die Lösung ganz einfach?

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

301 Beiträge seit 2009
vor 5 Jahren

Ich würde vermuten, dass die x:Class="..." Angabe im XAML dieser View ggf. falsch ist aus welchen Gründen auch immer.

Zumindest würde ich zunächst definitiv versuchen auszuschließen, dass es sich um keinen Fehler im Code handelt den Visual Studio hier ignoriert oder nicht beachtet.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 5 Jahren

using System.Windows.Controls;

namespace xxxxxxxxxxxxxxxx.Maintenance.Views
{
    /// <summary>
    /// Interaction logic for ViewA.xaml
    /// </summary>
    public partial class ViewA : UserControl
    {
        public ViewA()
        {
            this.InitializeComponent();
        }
    }
}

Hinweis: Das ist die View.xaml.cs Datei

Es sind 4 Komponenten die so aussehen und er versucht das bei jeder von denen.

Die ViewA selbst sieht so aus:

<UserControl x:Class="xxxxxxxxxxxxxxxx.Maintenance.Views.ViewA"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:xxxxxxxxxxxxxxxx..Maintenance.Views"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             xmlns:prism="http://prismlibrary.com/"
             prism:ViewModelLocator.AutoWireViewModel="True" >
    <Grid>
        <TextBlock Text="{Binding Message}"
                       HorizontalAlignment="Center"
                       VerticalAlignment="Center" />
    </Grid>
</UserControl>

EDIT: Fehlermeldung nochmal hier angehängt:

Fehlermeldung:
"C:\Sources\Blub\ProjectName.sln" (restore;compile Ziel) (1) ->
"C:\Sources\Blub\Blub.Management.Handler.Error\Blub.Management.Handler.Error.csproj" (compile Ziel) (13:6) ->
(CoreCompile Ziel) ->
Views\ErrorView.xaml.cs(12,13): error CS0103: Der Name "InitializeComponent" ist im aktuellen Kontext nicht vorhanden. [C:\Sources\Blub\Blub.Management.Handler.Error\Blub.Management.Handler.Error.csproj]

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

74 Beiträge seit 2014
vor 5 Jahren

Guten Morgen,

Das Tooling generiert für XAML-Dateien C#-Code, wo u. a. die InitializeComponent-Methode enthalten ist. Das passiert in zusätzlichen MSBuild-Targets, die für die jeweiligen Projekttypen definiert sind. Wenn Du nur den Compile-Target laufen lässt, werden diese Targets nicht ausgeführt und die generierten Dateien werden nicht zur Liste von zu kompilierenden Dateien hinzugefügt (und vermutlich auch nicht generiert). Führe den Build-Target aus, dann wird auch alles korrekt generiert und dem Compiler übergeben. Du kannst diese Targets auch selbst ausführen, aber dazu müsstest Du wissen, wie sie heißen und in welcher Reihenfolge sie ausgeführt werden müssen.

Grüße

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 5 Jahren
[gelöst]

Danke Lando.
Ich stimme Dir zu.

Mit dieser Codezeile hat es dann funktioniert:

cd ..
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe" "ProjectName.sln" /t:restore /t:build /nologo /nr:false /flp:"logfile=ProjectName.sln.log;verbosity=diagnostic"
set /p DUMMY=Hit ENTER to continue...

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.