【问题标题】:How do you handle excluded files with aspnet_compiler?您如何使用 aspnet_compiler 处理排除的文件?
【发布时间】:2018-04-09 22:56:13
【问题描述】:

我正在尝试使用 aspnet_compiler 将已经编译的项目从一个位置移动到另一个位置。我正在使用 Subversion 进行版本控制。

该过程基本上是从 subversion 中获取所有代码,进行构建,然后调用 aspnet_compiler。

当我有一个排除的 ascx 文件时,我的问题就出现了。这个文件是最新代码的一部分,但是正常的编译编译器会忽略它,所以没有麻烦。然而,Aspnet_compiler 崩溃了,因为它找不到该特定控件的代码。

我不确定

  • 我做对了;
  • 有一种方法可以从 Subversion 获取正确的文件树
  • 有一个更简单的方法;或
  • 这是意料之中的,我每次都需要删除排除的文件。

我将不胜感激。

汤姆

【问题讨论】:

  • 如果您的 ASCX 控件不再需要,为什么不将其删除?使用 Subversion,您仍然可以通过旧版本访问文件。
  • 我们已经从解决方案中删除了它,但是当我们使用 Subversion 获取项目时,它会获取所有文件,包括未使用的文件。

标签: .net svn web-deployment aspnet-compiler


【解决方案1】:

从 .NET 4.5 或 4.5.1(我不确定是哪个)开始,向 aspnet_compiler.exe 添加了一个 -x 选项,允许您从编译中排除目录。您可以通过命令“aspnet_compiler /?”找到该选项。

-x            The virtual path of a directory that should be excluded from precompilation.
This switch can be used multiple times.

例子:

我的网站中有一个名为“ToBeExcluded”的文件夹。我可以使用以下命令来预编译网站并排除该文件夹,

aspnet_compiler -v /foo -p "C:\MyWebsite" -x ToBeExcluded "c:\temp\web"

【讨论】:

  • 这个 -x ToBeExcluded "c:\temp\web" 是否也适用于文件...例如 -x ToBeExcluded "c:\temp\web\myfile.rdlc"
【解决方案2】:

这是预期的:Aspnet_compiler.exe 编译应用程序中的所有文件,而不查看项目文件。因此,它没有任何排除文件的概念。

Babak Naffas 的删除文件的建议可能是处理文件的最简单方法,而不是每次都手动删除(或编写删除脚本)。

【讨论】:

    【解决方案3】:

    我为此苦苦挣扎了很久。不过终于找到了解决办法

    attrib +h folderToExclude & runAspComplierWithAllOptions & attrib -h folderToExclude
    

    隐藏文件夹 -> 编译 -> 显示文件夹。

    【讨论】:

      【解决方案4】:

      有一个非常简单的方法:将隐藏属性设置为要排除的文件夹,aspnet_compiler 会跳过它。

      这个错误的一个典型案例是npm install创建的node_modules文件夹

      如果您从脚本或命令行运行npm install,则可以在运行nmp install 后运行attrib 命令以隐藏文件夹:

      attrib +H node_modules
      

      如果您从msbuild 项目运行npm install,您可以添加exec 任务,如下所示:

      <PropertyGroup>
          <HideFolder>attrib +H "$(PackageJsonFolder)\node_modules"</HideFolder>
      </PropertyGroup>
      <!-- next line is for debugging, remove it when finished -->
      <Warning Text="Hide node_modules command: '$(HideFolder)'"/>
      <Exec Command="$(HideFolder)">
      

      attrib 命令的退出代码始终为零,至少在我的测试中如此,因此检查它以确定命令是否成功运行是没有意义的。

      在前面的msbuild 示例中,要隐藏的文件夹是"$(PackageJsonFolder)\node_modules",因为属性PackageJsonFolderpackages.json 文件所在的文件夹的名称,因此node_modules 将被创建。

      对于其他情况,您始终可以指定相对于项目位置的文件夹,如下所示:

      <HideFolder>attrib +H "$(MSBuildProjectDirectory)\folder\to\hide"</HideFolder>
      

      并使用上一个示例中相同的石灰运行命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多