如何阻止C#中执行dotnet build时自动生成.sln文件?
问题原因与解决方法
原因分析
- 自动生成sln的触发逻辑:当你在包含多个项目文件的目录,或是在项目目录的上级目录中执行
dotnet build并指定单个csproj文件时,如果当前工作目录里没有解决方案文件(.sln),dotnet CLI会自动生成一个与当前工作目录同名的sln文件,把指定的csproj纳入其中作为临时构建载体。比如你在名为foo的项目目录下(目录内还有其他csproj文件)执行dotnet build foo.csproj,CLI找不到对应sln,就会生成foo.sln。 - 构建冲突的触发:当目录中同时存在sln和csproj文件时,若你执行不带参数的
dotnet build,CLI无法自动判断你要构建解决方案还是单个项目,因此抛出“无法选择”的错误。
解决方法
- 明确指定构建目标:每次执行构建时,直接指定要构建的文件,比如
dotnet build foo.csproj或dotnet build foo.sln,让CLI明确知道构建对象,避免冲突。 - 删除自动生成的sln:如果不需要这个自动生成的解决方案文件,直接删除即可。之后只要你执行
dotnet build foo.csproj(明确指定项目文件),就不会再触发自动生成sln的逻辑。 - 手动创建规范的sln:如果需要用解决方案管理项目,手动创建对应sln并添加项目:
之后CLI会优先使用你手动创建的sln,不会再自动生成临时文件。dotnet new sln -n foo dotnet sln add foo.csproj - 避免无参数执行build:在包含多个项目或sln的目录下,永远不要直接执行不带参数的
dotnet build,必须指定具体的构建目标文件。
内容的提问来源于stack exchange,提问作者James McGlashan
相关产品推荐
相关产品推荐

