私はいくつかのマークアップ拡張機能の作成に取り組んでおり、非常に奇妙な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を実行しています。VS2012 Update 1でも同じソリューションが機能します。
ソリューションはネットワーク共有で実行されています。 .Net(およびVisual Studio)アプリケーションは、ネットワーク共有で実行すると、許可/アクセスの問題が発生する可能性があります。
ソリューションをローカルドライブ(完全信頼)にコピーすると、問題ありません。
ネットワークドライブを完全な信頼で動作させることは可能です-StackOverflowや他の場所でこれに対する答えを見つけることができます-しかし、私の経験では、これを行うと障害にぶつかります。手元の問題。
例えば。この質問には、これを行う方法に関する指示があります。
Visual Studio 2012および.Net 4.0のUNC共有にFullTrustを付与
私はこれまでVS2010でこれを試したことがありませんので(リンクに示されているように)2012であなたはより良い喜びを持つかもしれません。
これに出くわした人にとっては、他に何かをする前に...クラス/名前空間が正しく、再構築しても問題が解決しないと確信している場合:
Visual Studioを再起動してください
それでおしまい!
これはVisual Studio 2012のバグのようです(XAML開発をサポートする他のすべてのバージョンにも影響するようです)
更新:Visual Studioの再起動が機能しない場合は、PC全体を再起動します。
更新:@Dunkのコメントに記載されているように、Visual Studioの再起動が機能しない場合は、.suoファイルを削除してみてください
同じ問題が発生しましたが、ファイルはローカルに保存されます。 IValueConverterは、それを使用するビューとは異なるアセンブリにあります。 VS2013 IntelliSenseは以下を提案しましたが、機能していませんでした:
xmlns:conv="clr-namespace:MySharedAssembly.Converters"
最後にアセンブリを明示的に追加した後、動作しました:
xmlns:conv="clr-namespace:MySharedAssembly.Converters;Assembly=MySharedAssembly"
私は何時間もこのエラーに固執しました。アセンブリと名前空間は正しく、クラスと参照も正しいです。コンパイルして問題なく実行できました。デザイナーだけが何らかの問題を抱えていました。働いた唯一のもの
私はx64バージョンでしか持っていなかった3d party portable.libraryを使用しています。
VS 2015でも引き続き発生します。App.xamlのSomeConverterを取り出しました。
<Application.Resources>
<!--Value Converters-->
<local:SomeConverter x:Key="mySomeConverter"/>
Strg-Shift-B
それを元に戻します-そして、うまくいきました。
広範なソリューションを試す前に、次のことを試してください。
私はまったく同じ問題を抱えていたので、エラーを引き起こしていたウィンドウ/フォームを閉じてからプロジェクトを実行しました。
エラーは、プロジェクトが正常に実行され、復旧しなかったときにクリアされるように見えました。
これが迅速な解決策を探している人の助けになることを願っています。
ローカルドライブ上のネットワーク共有へのシンボリックリンクを作成します。
コマンドラインに移動し、mklink/D C:\ LOCALFOLDER\YOURNETWORKPATHと入力します
次に、ローカルフォルダーからプロジェクトを開くと、すべての問題がなくなります。これで、すべてのファイルがネットワーク共有に残ります。:)
私は新しいプロジェクトを始めて、この問題を抱えていました。 suoファイルの削除、プロジェクトのアンロード/リロード、VSの再起動など、ここにリストされたソリューションはどれも私にとってはうまくいきませんでした。
私にとってうまくいったのは、これは新しいプロジェクトだったので、まだ構築していないからです。 Window.DataContext要素をクリップボードから削除し、プロジェクトを一度(shift-ctrl-b)ビルドしてから、要素を再追加するとすぐに機能しました。
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の原因が考えられますか?アンリアル...
また、ネットワーク共有にプロジェクトがあり、このエラーが突然表示されました。プロジェクトをローカルディスクにコピー、クリーニング、再構築、VSの開閉など、上記のすべての提案を試しました。これらのどれも問題を解決しませんでした。
私のために働いたのは、viewmodelsフォルダへの名前空間参照を削除することだけでした(xlmns:vm = "clr-namespace:Myproj.ViewModel")。
タイプをxamlに追加しました(DataTemplate DataType = "{x:Type vm:myviewmodel}")。その後、Visual Studioは名前空間が見つからないことを検出し、プロンプトをクリックして名前空間を追加しました。
他の人のために立ち往生。
私のために働いたのは、名前空間エイリアスをlocalから他のものに変更することでした。
xmlns:local="clr-namespace:ExampleNameSpace.Folder" />
<Grid>
<StackPanel>
<local:ReferencedUserControl />
</StackPanel>
</Grid>
に
xmlns:blah="clr-namespace:ExampleNameSpace.Folder" />
<Grid>
<StackPanel>
<blah:ReferencedUserControl />
</StackPanel>
</Grid>
お役に立てれば!
私のために働いたのは、MOVE
をXCOPY
inPost Build
に変更することですproject properties
、次にre-build
プロジェクト。設計者は、プロジェクトの出力フォルダーにdllが必要な場合があります。 私は2015年に使用しています
同じ問題があった。問題を修正したのは、問題のクラスがinternal
としてマークされていることに気付いたときです。
internal class MyClass
{
}
public
に変更した後、デザイナーはXAMLを適切にコンパイルできました。
プロジェクトには3つのエラーがあり、ObjectDataProviderに関するこのエラーに焦点を当てました。他のエラーが原因でプロジェクトをビルドできない場合、このエラーは解決できないことがわかりました。コードが削除された他のイベントハンドラーがいくつかありました。ハンドラーをコントロールにリンクしようとしたコードも削除する必要がありました。その後、プロジェクトはビルドでき、ObjectDataProviderから参照しようとしているクラスが利用可能であることがわかりました。
これは2008年、10、12、13年の間私を悩ませてきました。
これが起こるたびに(そして、はい、私はネットワーク共有に取り組んでいます-それを避けることはできません)、VSを閉じ、FOLDERの名前を変更して、プロジェクトを再度開きます。 10回中9回、これは動作します。しばらくの間。
リソースディクショナリで宣言するとうまくいきました。
<Window.Resources>
<c:IsNullConverter x:Key="IsNullConverter" />
</Window.Resources>
問題は、Converter={c:IsNullConverter}}"
のようなマークアップ拡張機能を見つけたときにパーサー自体がたわむことですが、Converter={StaticResource IsNullConverter}
で問題ありません。多分そこが問題だと思う。
Windows 10、VS 2013
名前「XYZ」はネームスペース「clr-namespace:ABC」に存在しません
解決しました!!
呼び出したい関数/クラスが名前空間に存在するかどうかを確認します
正しい例:
.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はFunctionです
.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;
}
}
}
}
私の場合、このエラーは「遅延署名のみ」が有効になっている署名済みアセンブリが原因で発生しました。解決策は、(管理者として)開発者コンソールからsn -Vr *
コマンドを実行することでした。これにより、検証をスキップするためにアセンブリが登録されます。次に、Visual Studioを再起動します。