【问题标题】:How can I stop asp.net from blocking access to files then throwing access denied errors on build?如何阻止 asp.net 阻止对文件的访问,然后在构建时抛出拒绝访问错误?
【发布时间】:2016-10-22 01:03:48
【问题描述】:

我反复遇到如下构建错误:

未能使以下项目可运行: 项目名称>(.NETFramework,Version=v4.6.1) 原因:访问路径'C:\path from root em>>\src\项目名称>\bin\Debug\net641\win7-64x\一些dll、exe ,配置,无论>'被拒绝。

我从其他文件夹中收到了类似的错误,但将它们从源代码控制中移除会有所帮助(见下文)

有时手动进入资源管理器中的文件夹>右键单击>属性>取消选中“只读”适用于成功构建,但随后VS或TFS再次锁定文件并返回相同的构建错误

特别是目前有两个 .dll 文件被添加到 bin 中,它们被反复设置为“只读”,我必须在重建时在文件资源管理器中手动修复它。 AFAIK 这些不在源代码管理中,但解决方案中另一个项目中的同名文件已签入并且不会更改。

这可能与我正在使用 asp.net Core RC2 的事实有关,这还不是官方的,而且我正在将它与 Angular 2 RC1 但我认为这无关。

一个理论是它与 TFS 有关,因为错误似乎直到我将项目置于源代码控制之下才开始。

我在 Stack Overflow 上看到了许多类似的问题,但没有任何答案可以开始解决我自己的重复问题。

提示:我对转译的 .ts > .js 文件也有同样的感觉,将它们从源代码控制中移除似乎有所帮助,但我根本没有在源代码控制中看到 bin 文件夹(当然它隐藏在解决方案资源管理器,我看不到在源代码管理资源管理器中取消隐藏的选项,所以不确定它是否存在...)

【问题讨论】:

  • 我想您可能已经回答了自己的问题,“一个理论是它与 TFS 有关”。从表面上看,这就是正在发生的事情。建议:每次与TFS同步时检查文件夹的安全设置,并始终以管理员身份运行VS
  • 您不应该将项目 bin 文件夹中的已编译二进制文件检查到源代码管理中。一旦签入文件被设置为只读,直到签出。如果您需要/想要将二进制文件检入 TFS,请将它们移出项目(可能是构建后步骤)到一个文件夹中。当你编译VS需要能够删除然后重写你正在编译的项目的所有二进制文件。
  • 一种测试方法...查看整个解决方案。如果在您检查了“所有内容”时,问题消失了,那么 VS 在编译期间需要重写的东西正在检查中。然后您可以弄清楚它是什么并将其从源代码管理中删除。
  • @DaniDev 我的问题是我在源代码管理资源管理器中看不到那些。它们隐藏在解决方案资源管理器中,但我在源代码管理资源管理器中看不到“取消隐藏”选项,因此不确定它们是否已签入。我对 TFS 很陌生 - 有没有不同的方法可以解决是吗?
  • 你以管理员身份运行 VS 吗?

标签: c# asp.net tfs angular asp.net-core


【解决方案1】:

问题似乎是 TFS 与 .net Core 的集成,或者无论如何与 TFS 集成。

解决方法一般是颠覆TFS,比较笨重,应该没必要。以下是我做过的一些事情...

  • 使用 .tfignore(类似于 .gitignore)来防止某些文件(例如转译的 .ts => .js)被检入。如果不采取奇怪的步骤,这将不起作用like installing this...
  • 只需签出并锁定仍然给我带来麻烦的所有文件(请参阅我对其他问题的回答 here
  • 几乎可以使用任何其他策略来阻止 TFS 签入它不应该签入的文件(有时就像将它们留在“排除的更改”列表中直到其他人需要访问一样糟糕,此时我必须将它们全部删除和/或撤消所有更改)

总而言之,我真的希望微软能在 .net Core 正式发布之前解决我遇到的大部分或所有可怕的错误。在这一点上,我非常想成为一名 node.js 开发人员。

【讨论】:

    【解决方案2】:

    当文件<project name>.exe.config 导致问题时,我找到了解决此问题的方法。由于该文件基本上是 app.config 的副本,我尝试检查 app.config 并且问题消失了。

    因为无法编译该项目,我陷入了困境。我希望这对处于同样困境的人有所帮助。

    【讨论】:

      【解决方案3】:

      我在脚本部分添加了一个后编译:

      "postcompile": [
        "cmd /c echo Removing read-only attributes in %project:Directory%\\bin\\ && cmd /c attrib -r  %project:Directory%\\bin\\* /s",
        "cmd /c echo Removing read-only attributes in %project:Directory%\\..\\packages\\ && cmd /c attrib -r  %project:Directory%\\..\\packages\\* /s"
      ]
      

      很适合我

      【讨论】:

      • 你把这个“后编译”部分放在哪里了?
      • 在project.json中
      • 谢谢,我稍后再试。
      • 没有帮助我的无赖。无论如何。
      • 你可能在其他地方有更多的只读属性,继续添加它们..
      【解决方案4】:

      此问题似乎正在跟踪中,您可以在链接中对其进行监控:

      https://github.com/dotnet/cli/issues/3419

      【讨论】:

      • 感谢您指出这一点。当我遇到完全相同的问题时,我确实遇到过它,但是我能够从源代码管理中删除该项目,从而解决了问题。我不确定我目前遇到的是相同或其他内容的变体,但我没有在源代码管理中看到这些项目(再次,它们会被“隐藏”吗?)
      • 源代码管理可以隐藏已删除的项目,但不会隐藏其他文件。您可以创建一个新的工作区来执行获取最新,然后构建项目以查看您将获得什么。
      【解决方案5】:

      我最终删除了 app.config,并将其内容移至 project.json。

      App.config 内容(我删除的):

      <configuration>
         <runtime>
            <gcServer enabled="true"/>
         </runtime>
      </configuration>
      

      将此添加到 project.json:

      "runtimeOptions": {
        "configProperties": {
          "System.GC.Server": true
        }
      },
      

      我还从 github 安装了最新的 dotnet/cli,它修复了具有相同问题的包文件夹 DLL。我使用 .NET Core SDK 安装程序dotnet --version 现在显示1.0.0-preview3-003585

      记住,在您进行更改之后和运行下一次构建之前手动删除\bin 文件夹。清理任务不会删除所有文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        相关资源
        最近更新 更多