关于编译

脚本.bat文件

之前对脚本文件接触较少,以下面的小段代码,以小窥大,开始对脚本的初步学习

-----------------------------------------------------------------------------------------------
@echo off
echo 现在的 %%cd%% 和 %%~dp0 没啥区别...
echo %%cd%%  ---  %cd%
echo %%~dp0  ---  %~dp0

echo 请在按下任意键后,将跳转到D盘的111222目录去...
pause > nul

cd /d D:111222

echo 现在再来看看它们的区别...
echo %%cd%%  ---  %cd%
echo %%~dp0  ---  %~dp0
pause
------------------------------------------------------------------------------------------------

1)命令行文件夹

cd /d D:111222:表示直接切换到后面的文件夹。若不加参数 /d,达到同样的效果需要2步走

cd D:111222
D:

或者更麻烦的方法,按路径从左至右依次进入

D:
cd 111
cd 222

2)pause .VS. pause > nul

关于编译pause:暂停命令,执行时会在命令行窗口显示“请按任意键继续. . .”,并等待你按键

pause > nul:作用相同,区别是不显示“请按任意键继续. . .”这些字,nul 把文字隐藏了

nul 是空设备/空文件,可以理解成批处理的“黑洞”(什么东西都可以吞下,并使之永远消失) 

3)@ .VS. echo off

echo off:关闭下面命令的回显

@:关闭当前命令回显,值影响当前行,但是,@并不受echo状态的影响

@echo off:关闭所有命令行的回显

4)%cd% .VS. %~dp0

  • %cd%:当前目录工作路径,%~dp0:脚本所在路径
  • %cd% 得到的最后不带,%~dp0后面会带

在当前目录没有变化的情况下,两者确实没啥不同,但当脚本在运行中切换了目录,那么就有区别。

  • a)%cd% 可以用在批处理文件中,也可以用在命令行中,展开后是驱动器盘符:+当前目录。如在dos窗口中进入c:dir目录下面, 输入:echo %cd% ,则显示为:c:dir。 %cd%的内容是可以被改变的,其内容为命令的执行路径或批处理文件的执行路径。
  • b)%~dp0 只可以用在批处理文件中,它是由它所在的批处理文件的目录位置决定的,是批处理文件所在的盘符:+路径。在执行这个批处理文件的过程中,它展开后的内容是不可以改变的。

5)其他常用命令

..:回溯至上一层目录
call:调用另一个批处理文件 call build_ex.bat
@if not exist %OUTROOT% @md %OUTROOT%:目录|文件不存在则创建
@rem:用于注释
@ren:文件重命名
@del:删除文件
%date% %time%:当前日期时间
Copy "%OUTROOT%xxx.txt" "%OUTPUT%":文件拷贝

6)文件操作

//脚本启动.exe程序
pushd 绝对路径(最后不带)
start exeName.exe
exit

  

Debug .VS. Release

1. Debug:调试模式,包含调试信息,生成的二进制命令没有经过编译器的优化。

2. Release:发布模式,编译器优化,不能对源代码进行调试,代码文件小,执行速度优。

Debug和Release模式均会生成.exe或.dll文件。但是Debug模式还会生成.pdb文件,包含代码断点、单步执行等调试信息。

注意,代码中包含预编译指令时,务必谨慎;

在实际生产上部署,应该使用Release版本。

关于obj文件

用于存放编译过程中生成的中间临时文件。obj目录中包含Debug和Release两个子文件夹,是项目生成的.dll的源目录,然后将生成好的.dll复制到bin目录下。在.Net中,

  • 编译是分模块进行的,每个模块的编译结果都保存在obj目录下,最后会合并为一个.exe或.dll文件保存到bin目录下;
  • 编译是增量编译,只重新编译改变了的模块;

obj目录保存了这些小块的编译结果,可以加快编译速度。

疑难杂题

1. ConfigurationManager.GetSection Error

//问题
创建 xxx 的配置节处理程序时出错: 未能加载文件或程序集“exeName”或它的某一个依赖项。系统找不到指定的文件。 (exeName_Test.exe.Config line 4);
//解决
右键项目,修改程序集名称,然后重新生成

注意,程序集名称、生成的exeName、配置文件名,以及配置文件中的

  <configSections>
    <section name="nodeName" type="XXX.AppName.Config.className, 程序集name "/>
  </configSections>

要保持一致。其中,className 程序中定义形式如下

namespace XXX.AppName.Config
{
    public class className: ConfigurationSection
    {
        [ConfigurationProperty("configName", IsRequired = true)]
        public ServerCollection ConfigName
        {
            get { return this["configName"] as ServerCollection; }
        }
    }
}
原文地址:https://www.cnblogs.com/wjcx-sqh/p/8885928.html