2

App.xamlに次のコードがあります。

<Application x:Class="PcgTools.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:local="clr-namespace:PcgTools.ViewModels" 
         xmlns:res="clr-namespace:PcgTools.Resources"
         StartupUri="MainWindow.xaml"
         Startup="Application_Startup">
    <Application.Resources>
        <ResourceDictionary>
            ...
            <res:Strings x:Key="LocStrings"/>
        </ResourceDictionary> 
    </Application.Resources>
</Application>

(...は、例をわかりやすくするために削除したいくつかの行です)。

アプリケーションを実行すると、次のエラーが発生します(実行/デバッグを試みた直後):(オランダ語から翻訳されているため、文字通り100%等しくない可能性があります):

タイプPcgTools.Resources.Stringsに一致するコンストラクターが見つかりませんでした。ArgumentsまたはFactoryMethod命令を使用して、このタイプを作成できます。

Strings.Designer.csファイルにはコンストラクターがあります。

namespace PcgTools.Resources {
...
public class Strings {
...

[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute
   ("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Strings() {
    }

ただし、生成されているため、変更することもできません。

ところで、コードを変更せずに(約1週間前に)機能しましたが、デバッグ時に約30%の確率でこのエラーが発生し、再試行した後、この例外は発生しませんでした。

4

2 に答える 2

2

あなたのPcgTools.Resources.Stringsクラスにはパブリックデフォルトコンストラクタがありますか?一致するコンストラクターが見つからないためにオブジェクトを作成できず、を使用していないArgumentsため、デフォルトのコンストラクター(引数のないコンストラクター)を探していると不平を言っていると思います。コンストラクターは、内部またはプライベートではなく、パブリックである必要があります。

コードが生成されるので、これを回避する方法を見つける必要があります。FactoryMethodsを使用すると機能する場合があります。そのためには、次のような別のクラスを設定します

namespace PcgTools.Resources
{
    public static class StringResourceHelper
    {
        public static strings GetStringResources()
        {
            return new Resources.Strings();
        }
    }
}

次に、XAMLで次のことができます。

<res:Strings x:FactoryMethod="res:StringResourceHelper.GetStringResources" 
             x:Key="LocStrings"/>
于 2013-01-15T20:34:11.753 に答える
0

参照:

http://dotnet.dzone.com/news/did-you-know-silverlight-class

つまり、名前空間に.Resourcesという名前を付けないでください。Resourcesという名前を付ける必要はありませんが、他の名前を付けると、上記のエラーが発生します。

編集:ただし、リソース文字列を変更した後、上書きされたファイル(..Designer.cs)には、パブリックコンストラクターではなく内部コンストラクターが含まれているため、質問からエラーが発生したようです。

于 2013-01-15T21:42:09.637 に答える