“CopyAndConvertResources”任务意外失败(只读资源)

Posted

技术标签:

【中文标题】“CopyAndConvertResources”任务意外失败(只读资源)【英文标题】:"CopyAndConvertResources" task failed unexpectedly (Read-only resources) 【发布时间】:2014-10-14 13:36:43 【问题描述】:

“访问路径...obj\Debug\res...被拒绝”当资源 文件被标记为只读

我收到错误“Copy And Convert Resources”任务意外失败(只读资源)

这个问题在使用 TFS 时特别明显,因为 TFS 自动将所有资源标记为只读。

错误 1 ​​“CopyAndConvertResources”任务意外失败。 System.UnauthorizedAccessException:对路径“C:\Users\Windows User\Desktop\androidApp1\AndroidApp1\obj\Debug\res\drawable\image1.png”的访问被拒绝。 在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径) 在 System.IO.FileStream.Init(字符串路径、FileMode 模式、FileAccess 访问、Int32 权限、Boolean useRights、FileShare 共享、Int32 bufferSize、FileOptions 选项、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath、Boolean checkHost) 在 System.IO.FileStream..ctor(字符串路径、FileMode 模式、FileAccess 访问、FileShare 共享、Int32 bufferSize) 在 System.IO.File.OpenFile(字符串路径,FileAccess 访问,SafeFileHandle& 句柄) 在 System.IO.File.SetLastWriteTimeUtc(字符串路径,日期时间 lastWriteTimeUtc) 在 Xamarin.Android.Tasks.CopyAndConvertResources.Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.d__20.MoveNext() AndroidApp1

【问题讨论】:

【参考方案1】:

Xamarin 3.7.201 和 Xamarin.Android 4.18 为在文件系统上标记为只读的资源文件引入了回归。我已经为这个问题提交了一个高优先级的错误。由于本周许多 Xamarin 开发人员都忙于 Evolve,因此此问题的修补程序可能要到下周才能发布。

这个问题在使用 TFS 时特别明显,因为当 TFS 将所有资源文件置于源代码控制之下时,它会自动将所有资源文件标记为只读。

解决方法 1:从 TFS 检出 Resources 文件夹(递归)

从目前的 cmets 来看,听起来使用 TFS 是解决此问题的最常用方法。 TFS 很可能已将Resources\ 文件夹及其所有内容标记为只读。在某些情况下,作为临时解决方法,以下步骤已成功:

    删除bin\obj\ 文件夹。 从 TFS 中检出 Resources\ 文件夹(递归)。这应该会关闭所有文件的只读标志。

解决方法 2:递归地从 Resources 文件夹中删除只读标志

您可以尝试手动从Resources\ 文件夹及其所有内容中删除只读标志。例如,您可以完全在 TFS 或 SourceGear Vault 之外创建解决方案的副本,或者仅从源代码管理中删除 Resources\ 文件夹,然后使用此技术。

一位用户报告说,解决方法 1 在他们的案例中没有解决 TFS 的问题,但添加了一个“预构建事件”命令来删除所有只读属性,并添加一个“构建后事件”命令来放置它们返回(在“项目属性 -> 构建事件”下)确实有效。

解决方法 3:连续构建项目两次

从目前的 cmets 来看,当源代码管理已将文件标记为只读时,听起来此方法不起作用。但在仅将单个资源标记为只读的更简单情况下,初始构建期间发生的构建错误可能不会在后续构建期间出现(在资源已复制到 obj\ 文件夹之后)。在这些情况下,可以通过在每次部署期间构建项目两次(没有干预清理或重建)来解决问题。

解决方法 4:降级到 Xamarin 3.6.262 (Windows) 或 Xamarin.Android 4.16.0.17 (Mac) 或更早版本

Windows

    降级到适用于 Windows 的 Xamarin 3.6.262(或更早版本): http://download.xamarin.com/XamarinforVisualStudio/Windows/Xamarin.VisualStudio_Setup-3.6.262.msi 如果您使用 Xamarin.ios,请下载此已更正的 .targets 文件:https://s3.amazonaws.com/xvs.xamarin.com/Xamarin.iOS.Common.targets。 (需要第 2 步和第 3 步来解决 3.6.262 中的错误)。 将文件复制到C:\Program Files (x86)\MSBuild\Xamarin\iOS,覆盖现有文件。 (此步骤需要管理员权限。) 如果您使用 Xamarin.iOS,您还需要将 Mac 生成主机降级到匹配的版本: http://download.xamarin.com/MonoTouch/Mac/monotouch-8.0.0.63.pkg

苹果机

    降级到 Xamarin.Android 4.16.0.17 或更早版本: http://download.xamarin.com/MonoforAndroid/Mac/mono-android-4.16.0-17.pkg

构建错误

// Error    1   The "CopyAndConvertResources" task failed unexpectedly.
// System.UnauthorizedAccessException: Access to the path 'C:\Users\Windows User\Desktop\AndroidApp1\AndroidApp1\obj\Debug\res\drawable\image1.png' is denied.
//    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
//    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
//    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
//    at System.IO.File.OpenFile(String path, FileAccess access, SafeFileHandle& handle)
//    at System.IO.File.SetLastWriteTimeUtc(String path, DateTime lastWriteTimeUtc)
//    at Xamarin.Android.Tasks.CopyAndConvertResources.Execute()
//    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
//    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext()  AndroidApp1

有关此特定问题的 QA 测试的注意事项

目前,Xamarin 的稳定版本测试过程中不包含 TFS。如果您希望将此添加为测试过程的一部分,我们强烈建议您在 Xamarin 的 UserVoice 上对其进行投票。在没有关于需要对 TFS 进行回归测试的用户数量的数据的情况下,将 TFS 添加到测试方案中的计划将不得不等到 Xamarin 增长到具有一些额外的测试能力。如果 TFS 回归测试显示为对 UserVoice 的高要求建议,则可以尽快将其添加到测试方案中。

【讨论】:

以上是关于“CopyAndConvertResources”任务意外失败(只读资源)的主要内容,如果未能解决你的问题,请参考以下文章