我正在尝试在Visual Studio中的Xamarin.Android项目中对我的Android.Manifest文件实施预构建转换 - 目的只是根据我是否构建调试版本来更改应用程序的bundleID版本
我在我的解决方案中添加了一个新的.netFramework项目,引用了Microsoft.Build,然后添加了一个名为BuildTask的新类,并在我的Xamarin.Android项目中引用了该DLL。
然后我打算在最底部,在结束标记上方的Xamarin.Android项目的.csproj文件中添加一个UsingTask - 我认为这是正确的。
在我添加UsingTask之前,我想确保构建Xamarin.Android项目,但不幸的是我在Xamarin.Android项目中遇到错误引用的错误,说我缺少对System.Collections的引用,但是错误消失了第二次我删除了对我的新BuildTask.DLL的引用
我以前从未这样做过,所以我可能会走向兔子洞......如果有人有任何建议,我们将非常感激。
这是我的BuildTask类供参考:
using System;
using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;
using System.Xml;
public class BuildTask : Task
{
private const string AndroidNamespace = "http://schemas.android.com/apk/res/android";
[Required]
public string PackageName { get; set; }
[Required]
public string ApplicationLabel { get; set; }
[Required]
public string ManifestFilename { get; set; }
public string Debuggable { get; set; }
public override bool Execute()
{
var xml = new XmlDocument();
xml.Load(ManifestFilename);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("android", AndroidNamespace);
if (xml.DocumentElement != null)
{
xml.DocumentElement.SetAttribute("package", PackageName);
var appNode = xml.DocumentElement.SelectSingleNode("/manifest/application", nsmgr);
if (appNode != null && appNode.Attributes != null)
{
var labelAttribute = appNode.Attributes["label", AndroidNamespace];
if (labelAttribute != null)
{
labelAttribute.Value = ApplicationLabel;
}
var debuggableAttribute = appNode.Attributes["debuggable", AndroidNamespace];
if (debuggableAttribute != null)
{
debuggableAttribute.Value = Debuggable;
}
xml.Save(ManifestFilename);
return true;
}
}
return false;
}
}
感谢。
答案 0 :(得分:0)
这是因为您正在将完整的.NET Framework引用到Xamarin.Android项目中。 这个完整的.NET框架与Xamarin.Android不兼容。您应该使用以下其中一个:
创建Android库项目。
创建可移植类库项目。
创建共享项目。