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

时间:2014-10-14 13:36:44

标签: android ios iphone xamarin xamarin.forms

"访问路径... 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 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)      在System.IO.FileStream..ctor(字符串路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize)      在System.IO.File.OpenFile(字符串路径,FileAccess访问,SafeFileHandle&句柄)      在System.IO.File.SetLastWriteTimeUtc(String path,DateTime lastWriteTimeUtc)      在Xamarin.Android.Tasks.CopyAndConvertResources.Execute()      在Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()      在Microsoft.Build.BackEnd.TaskBuilder.d__20.MoveNext()AndroidApp1

1 个答案:

答案 0 :(得分:1)

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

使用TFS时,此问题尤其明显,因为TFS会将所有资源文件置于源代码管理下时自动将所有资源文件标记为只读。

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

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

  1. 删除bin\obj\文件夹。
  2. 从TFS中检出Resources\文件夹(递归)。这应该关闭所有文件的只读标志。
  3. 解决方法可能性2:以递归方式从Resources文件夹中删除只读标志

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

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

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

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

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

    <强>窗

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

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

        // 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
        

        请注意针对此特定问题的质量检查测试

        目前,TFS未包含在Xamarin的稳定版测试过程中。如果您希望在测试过程中添加这些内容,我们强烈建议您在Xamarin的UserVoice上进行投票。由于没有关于需要对TFS进行回归测试的用户数量的数据,计划将TFS添加到测试方案中将不得不等到Xamarin增长到具有一些额外的测试能力。如果TFS回归测试显示为UserVoice上一个非常需要的建议,它可以更快地添加到测试方案中。