70

私はいくつかのマークアップ拡張機能の作成に取り組んでいましたが、非常に奇妙な VS の動作になり始めました。別のソリューションで問題を抽出して特定しました。問題は、VS が XAML で CLR オブジェクトを作成できないことです。

ここにあります:

意見:

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication4="clr-namespace:WpfApplication4">
    <Window.Resources>
        <wpfApplication4:Dog x:Key="doggy" />
    </Window.Resources>
    <Grid />
</Window>

コードビハインド:

using System.Windows;

namespace WpfApplication4
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

犬のクラス:

namespace WpfApplication4
{
    public class Dog
    {

    }
}

App.Xaml (App.Xaml.cs にコードなし):

<Application x:Class="WpfApplication4.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>

    </Application.Resources>
</Application>

プロジェクト設定

私が得ている例外:

Error   1   The name "Dog" does not exist in the namespace "clr-namespace:WpfApplication4". \\hopr1\folders$\vxk\Documents\Visual Studio 2012\Projects\WpfApplication4\MainWindow.xaml  6   9   WpfApplication4

ソリューションを実行することはできますが、デザイナーは「無効なマークアップ」エラーで失敗します

編集

VS 2012 Update 2 を実行しています VS 2012 Update 1 でも同じソリューションが機能します

4

21 に答える 21

49

ソリューションはネットワーク共有で実行されています。.Net (および Visual Studio) アプリケーションをネットワーク共有上で実行すると、権限/アクセスの問題が発生する可能性があります。

ソリューションをローカル ドライブに (完全に信頼して) コピーすれば問題ありません。

ネットワークドライブを完全に信頼して動作させることは可能です - これに対する答えは StackOverflow や他の場所で見つけることができます - しかし、私の経験では、これを行うと障害に遭遇し続けるので、それが絶対に重要でない限り、それを避けるようにしてください.目前の問題。

たとえば、この質問はこれを行う方法についての指示を提供します:

Visual Studio 2012 および .Net 4.0 の UNC 共有に FullTrust を与える

私はこれを VS2010 でしか試したことがないので、(リンクに示されているように) 2012 の方が楽しいかもしれません。

于 2013-04-25T14:56:04.800 に答える
32

同じ問題が発生しましたが、ファイルはローカルに保存されています。私の IValueConverter は、それを使用するビューとは別のアセンブリにあります。VS2013 IntelliSense は次のことを提案しましたが、機能していませんでした。

xmlns:conv="clr-namespace:MySharedAssembly.Converters"

最後に明示的にアセンブリを追加した後、それは機能しました:

xmlns:conv="clr-namespace:MySharedAssembly.Converters;assembly=MySharedAssembly"
于 2014-07-22T18:35:18.920 に答える
11

ダウンロードした DLL ソリューション

  1. .dll ファイルのブロックを解除する
    • それを右クリックしてプロパティを選択します
    • 「一般」タブでブロックを解除します(画像を参照)
  2. VS が XAML を再検証することを確認します (おそらく再起動することによって)

ここに画像の説明を入力

于 2015-12-13T13:09:53.567 に答える
6

VS 2015 でも発生します。App.xaml で SomeConverter を取り出しました。

<Application.Resources>
    <!--Value Converters-->
    <local:SomeConverter x:Key="mySomeConverter"/>

Strg-Shift-B
元に戻すと、機能しました。

于 2015-11-25T12:58:45.477 に答える
4

大規模な解決策を試す前に、次のことを試してください。

私はまったく同じ問題を抱えていました。エラーの原因となったウィンドウ/フォームを閉じてから、プロジェクトを実行しました。

プロジェクトが正常に実行され、元に戻らないと、エラーは解消されたようです。

うまくいけば、これは迅速な解決策を探している人に役立ちます.

于 2016-09-06T10:03:27.013 に答える
3

ローカル ドライブにネットワーク共有へのシンボリック リンクを作成します。

コマンドラインに移動し、「mklink /DC:\LOCALFOLDER \YOURNETWORKPATH」と入力します

次に、ローカル フォルダーからプロジェクトを開くと、すべての問題が解消されます。これで、すべてのファイルがネットワーク共有に残ります。:)

于 2014-07-09T10:22:43.453 に答える
1

ネットワーク共有にもプロジェクトがあり、このエラーが予期せず表示されました。プロジェクトのローカルディスクへのコピー、クリーニング、再構築、VSの開閉など、上記のすべての提案を試しました。これらのどれも問題を解決しませんでした。

私にとってうまくいったのは、viewmodelsフォルダー(xlmns:vm = "clr-namespace:Myproj.ViewModel")への名前空間参照を削除することだけでした。

タイプを xaml に追加しました (DataTemplate DataType="{x:Type vm:myviewmodel}")。その後、Visual Studio は名前空間が欠落していることを検出し、プロンプトをクリックして名前空間を追加しました。

于 2016-10-20T06:44:33.050 に答える
0

私にとってうまくいったのは、プロジェクトでMOVEtoXCOPYを変更することです。デザイナーは、プロジェクトの出力フォルダーに dll が必要な場合があります。私はvs 2015を使用していますPost Buildproject propertiesre-build

于 2016-03-29T18:20:02.137 に答える
0

これは2008年、10年、12年、13年と私を悩ませてきました。

これが発生するたびに(そして、ネットワーク共有で作業しています-避けられません)、VSを閉じ、FOLDERの名前を変更して、プロジェクトを再度開きます。10回中9回、これでうまくいきます。しばらくの間。

于 2014-06-09T15:17:18.550 に答える
0

Visual Studio を再起動した後、正しい方向を示す IntelliSense エラーが発生しました。

'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionTypeNode' は同じアセンブリに実装されているため、Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata ではなく x:Name 属性を設定する必要があります。 ReflectionPropertyNode 属性。

だから私はこれを変更しました:

<local:MyView Name="test"/>

これに:

<local:MyView x:Name="test"/>

そして、それはうまくいきました。それで、それは私たちに何を与えますか?42 考えられる原因? 非現実的...

于 2016-10-14T14:37:41.633 に答える
0

同じ問題がありました。私にとってそれを修正したのは、問題のクラスが次のようにマークされていることに気付いたときでしたinternal

internal class MyClass
{
}

に変更した後public、デザイナーは XAML を適切にコンパイルできました。

于 2016-01-29T23:44:24.413 に答える
0

名前「XYZ」は名前空間「clr-namespace:ABC」に存在しません</p>

解決しました!!

呼び出したい関数/クラスが名前空間に存在するかどうかを確認します

正しい例:

.XAML ファイル

          <Window x:Class="objectbinding.MainWindow"
           <!--your xmlns:x .......
           namespace1 is the project name-->
           xmlns:m="clr-namespace:namespace1"
            Title="MainWindow" Height="350" Width="525">
    <Grid>
 <StackPanel Orientation="Vertical">
            <StackPanel.Resources>
                <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                    x:Key="anyname" MethodName="GetStrings"/>

            </StackPanel.Resources>

       ItemsSource="{Binding Source={StaticResource Runni}}" />
        </StackPanel>
    </Grid>

//StringData は xaml.cs のクラス名で、GetString は関数です

.XAML.CS ファイル

 namespace namespace1
    {

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

        }
// the class StringData is defined in namespace namespace 1
        public class StringData
        {
            ObservableCollection<String> lst = new ObservableCollection<String>();

            public StringData()
            {
                lst.Add("Abhishek");
                lst.Add("Abhijit");
                lst.Add("Kunal");
                lst.Add("Sheo");
            }
            public ObservableCollection<String> GetStrings()
            {
                return lst;
            }
        }
    }

間違った例:

.XAML ファイル

  <Window x:Class="objectbinding.MainWindow"
              <!--your xmlns:x .......
           namespace1 is the project name-->
           xmlns:m="clr-namespace:namespace1"
            Title="MainWindow" Height="350" Width="525">
    <Grid>
 <StackPanel Orientation="Vertical">
            <StackPanel.Resources>
                <ObjectDataProvider ObjectType="{x:Type m:StringData}"
                                    x:Key="anyname" MethodName="GetStrings"/>

            </StackPanel.Resources>

       ItemsSource="{Binding Source={StaticResource Runni}}" />
        </StackPanel>
    </Grid>

.XAML.CS

namespace namespace1
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
//The StringData is defined in the class mainWindow not in namespace namespace1
        public class StringData
        {
            ObservableCollection<String> lst = new ObservableCollection<String>();

            public StringData()
            {
                lst.Add("Abhishek");
                lst.Add("Abhijit");
                lst.Add("Kunal");
                lst.Add("Sheo");
            }
            public ObservableCollection<String> GetStrings()
            {
                return lst;
            }
        }
    }

}
于 2017-11-20T08:52:21.263 に答える
-2

これは、リリース構成が原因である可能性があります。デザイナは、デバッグ構成から使用する必要があります。

于 2016-02-20T22:32:32.687 に答える