MsBuild(v14)手动编译未生成licenses.licx文件问题求助
我之前在项目里也碰到过一模一样的情况——Visual Studio 2017编译完全正常,但手动用MSBuild v14命令行构建时,就是生成不了licenses.licx,导致构建失败。结合我的排查经验,给你几个可行的解决方向:
1. 优先使用VS2017开发者命令提示符执行构建
直接从普通CMD窗口调用msbuild.exe最大的问题是:没有加载VS2017完整的构建环境。licenses.licx的生成依赖于LC.exe(License Compiler)以及MSBuild的相关任务集,这些组件的路径和配置只有在VS的开发者命令提示符里才会被正确初始化。
操作步骤:
- 打开开始菜单,找到
Visual Studio 2017文件夹下的Developer Command Prompt for VS 2017 - 在这个窗口里切换到你的项目目录,再执行你的MSBuild命令:
msbuild.exe [project_path] /verbosity:normal /t:rebuild /tv:14.0 /p:Configuration=Release,Optimize=true,Platform=AnyCPU,OutputType=Library
2. 显式指定License Compiler的路径
如果因为某些原因无法使用开发者命令提示符,可以在MSBuild命令里手动指定LC.exe的路径。LC.exe通常位于Windows SDK的工具目录下,对应v14版本的路径大概是:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools(根据你的SDK版本调整)
修改后的命令示例:
msbuild.exe [project_path] /verbosity:normal /t:rebuild /tv:14.0 /p:Configuration=Release,Optimize=true,Platform=AnyCPU,OutputType=Library,LCToolPath="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"
3. 检查项目文件的licenses.licx配置
有时候项目文件里的配置丢失或不正确,也会导致自动生成失败。打开你的项目文件(.csproj或.vbproj),确认是否包含以下配置:
<ItemGroup> <EmbeddedResource Include="licenses.licx"> <SubType>Designer</SubType> </EmbeddedResource> </ItemGroup> <PropertyGroup> <GenerateLicenses>true</GenerateLicenses> </PropertyGroup>
如果没有,手动添加后保存,再重新执行构建命令。
4. 清理构建缓存后重试
旧的bin、obj文件夹里的缓存文件可能会干扰构建流程。先手动删除项目目录下的bin/Release和obj/Release文件夹,再执行/t:rebuild命令,确保是完全干净的构建。
这些方法里,用开发者命令提示符执行构建是最容易解决问题的,我当时就是靠这个搞定的。如果还是不行,可以尝试增加/verbosity:detailed参数查看构建日志,找一找LC.exe相关的错误信息,进一步定位问题。
内容的提问来源于stack exchange,提问作者AndrePinto-NET

