在我的 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
{“找不到类型‘Class1’,因为‘FooNamespace’是一个未知的命名空间。[行:8 位置:6]”}
我尝试将名称分配给控件<cl:Class1 x:Name="foo"/>
以在生成的代码中引用 Class1。一样XamlParseException
。
我在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<AssemblyPart x:Name="PhoneClassLibrary1"
中指定TWICE时,应用程序才能运行
难道我做错了什么?我从事一个控制项目,该项目在多个解决方案中重复使用,并且不想在所有这些众多项目中修改 AppManifset.xml。
XmlnsDefinition
无需修改 AppManifset.xml 就可以工作吗?