从 运行 iOS / macOS 应用程序实例 (Xamarin Forms) 获取资源文件夹路径的正确方法是什么
What is the correct way to obtain the Resource folder path from the running iOS / macOS app instance (Xamarin Forms)
我在从我的应用程序资源文件夹复制一些文件时遇到困难:
var myDocuments = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Library");
// Confirm these paths are OK for iOS too
var root = Path.Combine(myDocuments, "VisitsRota.MacOS");
var styles = Path.Combine(root, "Styles");
var stylesheet = Path.Combine(styles, "ElderlyInfirm-Schedule-v1.css");
var db = Path.Combine(root, "ElderlyInfirmRotaData.xml");
var defaultroot = Path.Combine( ".", "Resources");
// Main folder
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
// Database
if (!File.Exists(db))
{
var defaultdb = Path.Combine(defaultroot, "ElderlyInfirmRotaData.xml");
File.Copy(defaultdb, db);
}
// Styles folder
if (!Directory.Exists(styles))
{
Directory.CreateDirectory(styles);
}
// Stylesheet
if (!File.Exists(stylesheet))
{
var defaultstylesheet = Path.Combine(defaultroot, "Styles", "ElderlyInfirm-Schedule-v1.css");
File.Copy(defaultstylesheet, stylesheet);
}
问题是确定应用程序文件夹资源文件夹,目前我得到这个异常:
访问 Resources 文件夹的正确方法是什么(对于 iOS 或 macOS)?
在 IDE 我只看到一个资源文件夹:
我的两个资源都有一个 Build Action 设置为 Content。
感谢您为我指出解决此问题的正确方向。
我尝试使用以下结果:
public static string GetExecutingDirectoryName()
{
var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
return new FileInfo(location.AbsolutePath).Directory.FullName;
}
完全错了。
我是 运行 VS 调试器中的应用程序 Mac(macOS 构建)。
我假设为这些文件使用 Resource 文件夹是可以的。除非有更好的方法来做到这一点?
使用 BundleResource 更容易:
var myDocuments = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Library");
// Create the folders first
// Main folder
var root = Path.Combine(myDocuments, "VisitsRota.MacOS");
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
// Styles folder
var styles = Path.Combine(root, "Styles");
if (!Directory.Exists(styles))
{
Directory.CreateDirectory(styles);
}
// Now copy the files
// Database
var db = Path.Combine(root, "ElderlyInfirmRotaData.xml");
var defaultdb = NSBundle.MainBundle.PathForResource("ElderlyInfirmRotaData", ofType: "xml");
if (!File.Exists(db))
{
File.Copy(defaultdb, db);
}
// Stylesheet
var stylesheet = Path.Combine(styles, "ElderlyInfirm-Schedule-v1.css");
var defaultstylesheet = NSBundle.MainBundle.PathForResource("ElderlyInfirm-Schedule-v1", ofType: "css");
if (!File.Exists(stylesheet))
{
File.Copy(defaultstylesheet, stylesheet);
}
我在从我的应用程序资源文件夹复制一些文件时遇到困难:
var myDocuments = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Library");
// Confirm these paths are OK for iOS too
var root = Path.Combine(myDocuments, "VisitsRota.MacOS");
var styles = Path.Combine(root, "Styles");
var stylesheet = Path.Combine(styles, "ElderlyInfirm-Schedule-v1.css");
var db = Path.Combine(root, "ElderlyInfirmRotaData.xml");
var defaultroot = Path.Combine( ".", "Resources");
// Main folder
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
// Database
if (!File.Exists(db))
{
var defaultdb = Path.Combine(defaultroot, "ElderlyInfirmRotaData.xml");
File.Copy(defaultdb, db);
}
// Styles folder
if (!Directory.Exists(styles))
{
Directory.CreateDirectory(styles);
}
// Stylesheet
if (!File.Exists(stylesheet))
{
var defaultstylesheet = Path.Combine(defaultroot, "Styles", "ElderlyInfirm-Schedule-v1.css");
File.Copy(defaultstylesheet, stylesheet);
}
问题是确定应用程序文件夹资源文件夹,目前我得到这个异常:
访问 Resources 文件夹的正确方法是什么(对于 iOS 或 macOS)?
在 IDE 我只看到一个资源文件夹:
我的两个资源都有一个 Build Action 设置为 Content。
感谢您为我指出解决此问题的正确方向。
我尝试使用以下结果:
public static string GetExecutingDirectoryName()
{
var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
return new FileInfo(location.AbsolutePath).Directory.FullName;
}
完全错了。
我是 运行 VS 调试器中的应用程序 Mac(macOS 构建)。
我假设为这些文件使用 Resource 文件夹是可以的。除非有更好的方法来做到这一点?
使用 BundleResource 更容易:
var myDocuments = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Library");
// Create the folders first
// Main folder
var root = Path.Combine(myDocuments, "VisitsRota.MacOS");
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
// Styles folder
var styles = Path.Combine(root, "Styles");
if (!Directory.Exists(styles))
{
Directory.CreateDirectory(styles);
}
// Now copy the files
// Database
var db = Path.Combine(root, "ElderlyInfirmRotaData.xml");
var defaultdb = NSBundle.MainBundle.PathForResource("ElderlyInfirmRotaData", ofType: "xml");
if (!File.Exists(db))
{
File.Copy(defaultdb, db);
}
// Stylesheet
var stylesheet = Path.Combine(styles, "ElderlyInfirm-Schedule-v1.css");
var defaultstylesheet = NSBundle.MainBundle.PathForResource("ElderlyInfirm-Schedule-v1", ofType: "css");
if (!File.Exists(stylesheet))
{
File.Copy(defaultstylesheet, stylesheet);
}