使用mstest.exe 命令行跑test case(不安装Visual Studio 2010)

使用mstest.exe 命令行跑test case(不安装Visual Studio 2010)

怎样在没有安装VS2010的环境里用mstest.exe跑test case?(注:以下实验在64位Windows 7上通过)

1. 首先在装有VS2010的环境里,新建一个文件夹,如C:\Users\username\Desktop\mstestCommandLine(注意文件夹名不能有空格,否则运行下面的脚本会有问题),然后把下面的脚本getmstest.bat复制到此目录下,运行getmstest.bat,这个bat会把mstest.exe需要的类库及注册表都导入到当前目录下一个叫mstest的文件夹里

getmstest.bat

复制代码
@echo off
setlocal
set here=%~dp0

mkdir mstest
set targetfolder=%here%mstest

set programs=%programfiles%
if exist "%programfiles(x86)%" set programs=%programfiles(x86)%
set vs2010="%programs%\Microsoft Visual Studio 10.0"
set gac1="%windir%"\assembly
set gac2="%windir%"\Microsoft.NET\assembly

echo === Copying from Visual Studio 2010 install folder...
copy %vs2010%\Common7\IDE\mstest* "%targetfolder%"
copy %vs2010%\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.Quality* "%targetfolder%"
copy %vs2010%\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.CodedUITestFramework* "%targetfolder%"

echo === Copying from %gac1%...
pushd "%gac1%"
dir /s /b *.dll | findstr QualityTools | findstr 10.0.0.0 > %here%tmp.filelist
popd
for /F "tokens=*" %%f in (tmp.filelist) DO copy "%%f" "%targetfolder%"

echo === Copying from %gac2%...
pushd "%gac2%"
dir /s /b *.dll | findstr QualityTools | findstr 10.0.0.0 > %here%tmp.filelist
popd
for /F "tokens=*" %%f in (tmp.filelist) DO copy "%%f" "%targetfolder%"

del tmp.filelist

echo === Exporting registry keys...
regedit.exe /e %targetfolder%\mstest.reg HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\EnterpriseTools\QualityTools\TestTypes

echo === Done. Check output for errors!
exit /b 0
复制代码

2. 准备跑test case需要的文件:我把它们放在了C:\Users\username\Desktop\mstestCommandLine\test文件夹里,如下图所示。注意下图里的TestResults为自己新建的文件夹,run case时会用到,用于存储test result。现在,要准备的文件都放在了C:\Users\username\Desktop\mstestCommandLine里

3. 在目标机器上安装.NET Framework 4.0
4. 把C:\Users\username\Desktop\mstestCommandLine文件夹复制到目标机器上,假设复制到目标机器的桌面上

5. 在目标机器上,运行C:\Users\username\Desktop\mstestCommandLine\mstest这个文件夹里的mstest.reg(双击即可)

6.在目标机器上,Run->cmd, 回车,进入mstest.exe所在的文件夹,然后运行下面的命令:

mstest /noisolation /testcontainer:C:\Users\<username>\Desktop\mstest\test\TestProject1.dll /resultsfile:C:\Users\<username>\Desktop\mstest\test\TestResults\result.trx

7. 运行结果如下图所示:

参考:

http://mindinthewater.blogspot.com/2008/11/executing-visual-studio-unit-tests.html

http://mindinthewater.blogspot.com/2011/02/executing-visual-studio-2010-unit-tests.html

<think>我们有两个核心问题需要解决:1.如何在Windows系统中处理文件路径超长(超过260字符)的问题。2.如何通过.gitignore忽略特定文件夹以避免类似的长路径问题。首先,针对Windows文件路径超长问题:-从Windows10版本1607开始,微软引入了长路径支持(LongPathSupport),但默认是关闭的。我们可以通过修改注册表或组策略来启用它。-另外,我们也可以使用一些替代方法,如使用虚拟驱动器(通过`subst`命令)或符号链接(通过`mklink`命令)来缩短路径。其次,关于通过.gitignore忽略特定文件夹:-我们需要在项目的根目录下创建或编辑.gitignore文件,添加要忽略的文件夹的规则。-对于问题中提到的路径:`\Message\CRMMessageNotificationSolution\packages\MSTest.TestAdapter.2.2.10\build\net46\..\_common\zh-Hans\Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.resources.dll`,实际上我们可能希望忽略整个`packages`文件夹(因为这是NuGet包存放的位置,通常需要纳入版本控制)。具体步骤:###解决Windows文件路径超长问题####方法1:启用Windows长路径支持(推荐)1.打开注册表编辑器(按Win+R,输入`regedit`,回车)。2.导航到以下路径:```HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem```3.找到名为`LongPathsEnabled`的DWORD值(如果没有,则右键新建->DWORD(32位)值,命名为`LongPathsEnabled`)。4.双击该值,将其设置为1(表示启用)。5.重启计算机。注意:此方法需要Windows10版本1607或更高版本。####方法2:使用`subst`命令创建虚拟驱动器1.打开命令提示符(管理员权限)。2.使用以下命令将长路径映射到一个驱动器字母(例如,将`C:\Long\Path\Project`映射为驱动器`X:`):```cmdsubstX:"C:\Long\Path\Project"```3.然后,你可以使用`X:\`来访问该路径,这样路径长度会大大缩短。注意:这个映射在重启后会消失,可以将其保存为批处理文件并设置为开机运行。####方法3:使用符号链接(mklink)1.打开命令提示符(管理员权限)。2.使用`mklink`命令创建一个指向长路径的符号链接(放在一个较短的路径下):```cmdmklink/DC:\shortlinkC:\Long\Path\Project```这样,你可以通过`C:\shortlink`来访问。###通过.gitignore忽略特定文件夹1.打开你的项目根目录,找到或创建`.gitignore`文件。2.添加以下规则来忽略`packages`文件夹(因为问题中的长路径包含`packages`,这是NuGet包的目录):```#忽略NuGet包目录packages/```3.如果还有其他需要忽略的文件夹,可以继续添加,例如:```#忽略构建输出目录bin/obj/```4.保存文件后,如果之前已经将`packages`文件夹添加到版本控制中,需要将其从缓存中移除(但保留在磁盘上):```bashgitrm-r--cachedpackages/gitadd.gitignoregitcommit-m"忽略packages文件夹"```5.这样,以后就会再跟踪`packages`文件夹下的文件,也就会因为该文件夹下的长路径文件而出现问题。###注意事项-如果项目使用的是.NET,那么`packages`文件夹通常是由NuGet包管理器创建的,应该纳入版本控制。同样,`bin`和`obj`文件夹也应忽略。-启用长路径支持后,Git和其他应用程序才能正常处理长路径。否则,即使忽略了这些文件夹,在操作过程中(如删除)也可能遇到问题。###相关问题1.如何忽略多个文件夹或文件模式(如所有`.tmp`文件)?2.如果文件夹已提交到Git历史,如何永久移除它?3.Git忽略规则有哪些常见错误和调试方法?</think>### 解决 Windows 文件路径超长问题及 Git 忽略策略 #### 一、解决 Windows 文件路径超长问题(>260字符) Windows 默认有 MAX_PATH 限制(260字符),可通过以下方法解决: 1. **启用长路径支持(推荐)** - Win+R 打开运行框 → 输入 `regedit` → 定位到: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem` - 新建 DWORD 值 → 命名为 `LongPathsEnabled` → 值设为 `1` - 重启系统生效[^1] 2. **使用符号链接缩短路径** 以管理员身份运行 CMD: ```cmd :: 创建虚拟驱动器映射 subst X: "C:\超长路径\Message\CRMMessageNotificationSolution" :: 或创建符号链接 mklink /D C:\shortlink "C:\原始超长路径" ``` 之后可通过 `X:\packages\...` 或 `C:\shortlink` 访问 3. **修改 Git 配置** 启用长路径支持: ```bash git config --global core.longpaths true ``` #### 二、通过 .gitignore 忽略特定文件夹 针对路径 `\Message\CRMMessageNotificationSolution\packages\...`: 1. **创建/编辑 .gitignore 文件** 在项目根目录创建: ```bash # 创建文件 touch .gitignore ``` 2. **添加忽略规则** 在 `.gitignore` 中添加: ``` # 忽略整个 packages 文件夹 Message/CRMMessageNotificationSolution/packages/ # 或精确忽略资源文件 Message/CRMMessageNotificationSolution/packages/**/Microsoft.VisualStudio.TestPlatform.*.resources.dll ``` - 使用 `**/` 匹配任意子目录 - 使用 `*` 通配文件名 3. **清除已跟踪文件的缓存** 若文件已被 Git 跟踪: ```bash git rm -r --cached Message/CRMMessageNotificationSolution/packages/ git add .gitignore git commit -m "忽略packages文件夹解决路径超长问题" ``` #### 三、路径超长问题的预防措施 1. **项目结构优化** - 将深层嵌套的 `packages` 移近根目录 (如 `./packages` 替代 `Message/.../packages`) - 使用较短的文件夹名(如 `msg` 替代 `Message`) 2. **NuGet 包管理优化** - 在 `nuget.config` 中修改包存储路径: ```xml <configuration> <config> <add key="repositoryPath" value=".\pkg" /> </config> </configuration> ``` 3. **使用 .NET Core SDK 风格项目** 新式项目文件自动避免深层路径: ```xml <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputPath>bin\</OutputPath> </PropertyGroup> </Project> ``` > **关键提示**:结合启用系统级长路径支持 + Git 长路径配置 + .gitignore 规则,可彻底解决此问题。对于 NuGet 包,建议始终忽略 `packages/` 目录[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值