私の WP7 ソリューションには、PhoneClassLibrary1
アセンブリがあります。そのAssemblyInfo.csには私が持っています
[assembly: XmlnsPrefix("FooNamespace", "cl")]
[assembly: XmlnsDefinition("FooNamespace", "PhoneClassLibrary1")]
私は簡単なコントロールを持っていますPhoneClassLibrary1
using System.Windows.Controls;
namespace PhoneClassLibrary1
{
public class Class1 : Control {}
}
PhoneApp1
同じソリューションのプロジェクトには、のメインページがあります
<phone:PhoneApplicationPage
x:Class="PhoneApp1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:cl="FooNamespace">
<cl:Class1/>
</phone:PhoneApplicationPage>
それはうまくコンパイルされます。しかし、実行すると、XamlParseException
{「'FooNamespace' は不明な名前空間であるため、タイプ 'Class1' は見つかりませんでした。[行: 8 位置: 6]」}
<cl:Class1 x:Name="foo"/>
生成されたコードで Class1 を参照するために、コントロールに名前を割り当てようとしました。同じXamlParseException
。
の AppManifest.xml を修正しPhoneApp1
ます。AssemblyPart
そのタグに注意してください。
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Deployment.Parts>
<AssemblyPart x:Name="PhoneClassLibrary1" Source="PhoneClassLibrary1.dll" />
</Deployment.Parts>
</Deployment>
その後、アプリケーションが正常に起動します。
PhoneApp1.xap (展開パッケージ) を調べると、次のように生成された AppManifest.xml が表示されます。
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" EntryPointAssembly="PhoneApp1" EntryPointType="PhoneApp1.App" RuntimeVersion="4.7.50308.0">
<Deployment.Parts>
<AssemblyPart x:Name="PhoneApp1" Source="PhoneApp1.dll" />
<AssemblyPart x:Name="PhoneClassLibrary1" Source="PhoneClassLibrary1.dll" />
<AssemblyPart x:Name="PhoneClassLibrary1" Source="PhoneClassLibrary1.dll" />
</Deployment.Parts>
</Deployment>
それはタイプミスではありません。生成された AppManifest.xml でTWICE<AssemblyPart x:Name="PhoneClassLibrary1"
が指定されている場合にのみ、アプリケーションを実行できます
私は何か間違ったことをしていますか?私は、複数のソリューションで再利用されるコントロール プロジェクトに取り組んでおり、多数のプロジェクトすべてで AppManifset.xml を変更したくありません。
AppManifset.xmlXmlnsDefinition
を変更しなくても動作しますか?