如何阻止asp.net阻止对文件的访问,然后在构建时抛出拒绝访问错误?

时间:2016-06-20 17:12:03

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

我反复按照以下方式获取构建错误:

  

无法使以下项目可运行:   < 项目名称 >(。NETFramework,Version = v4.6.1)原因:访问路径'C:\< 路径root > \ src \< 项目名称 > \ bin \ Debug \ net641 \ win7-64x \< 一些dll,exe,config,等等 >'被拒绝。

我从其他文件夹中得到了类似的错误,但是将它们从源代码控制中删除(见下文)

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

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

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

有一种理论认为它与TFS有关,因为在我将项目置于源代码控制之前,错误似乎没有开始。

我在Stack Overflow上看过很多类似的问题但是没有答案甚至开始解决我自己的重复问题。

提示:我对转化的.ts>进行了相同的处理。 .js文件并将它们从源代码控制中取出似乎有所帮助,但我根本没有看到源代码控制中的bin文件夹(当然它隐藏在解决方案资源管理器中,我看不到在源代码管理资源管理器中取消隐藏的选项,所以不确定它是否在那里......)

5 个答案:

答案 0 :(得分:3)

问题似乎是TFS与.net Core集成,或者与TFS集成。

解决方案通常是颠覆TFS,这是不实用的,不应该是必要的。以下是我做过的一些事情......

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

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

答案 1 :(得分:3)

当文件public class Base : A { void IsFileValid(){ // immplementaion details} } public class Child : Base, B { void IsValidRow(){// immplementaion details} } 导致问题时,我找到了解决此问题的方法。由于该文件基本上是 app.config 的副本,我尝试检出 app.config ,问题就消失了。

我死在水里,因为我无法编译项目。我希望这可以帮助处于同样困境的人。

答案 2 :(得分: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"
]

适合我

答案 3 :(得分:1)

似乎这个问题正在跟踪中,您可以在链接上监控它:

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

答案 4 :(得分:0)

我最终删除了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文件夹。清洁任务不会删除所有文件。