我有一个没有什么特别的.NET Core解决方案,让我们称之为它Application.sln
,它包含12个C#项目和1个SQL项目。在Visual Studio 2017中,构建所有项目都没有问题,但是当我转到命令行使用打包项目时dotnet pack Application.sln --no-build
,我立即遇到了sql项目问题。这是错误:
error MSB4019: The imported project "C:\Program Files\dotnet\sdk\1.1.0\Microsoft\VisualStudio\v14.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk
解密后,我发现第一部分C:\Program Files\dotnet\sdk\1.1.0
来自我,使用dotnet而不是msbuild打包解决方案,并且由于SSDT无法安装到dotnet文件夹中,因此将失败。
最好是,我希望它忽略.sqlproj项目,而只打包.csproj项目,因为此后我将分别处理sql项目,但是我看不到有任何办法。有办法吗?看来我不能使用MSBuild样式通配符作为dotnet pack
(***。csproj)的参数,因为这会引发单独的错误。
我曾尝试使用msbuild / t:pack,但这给了我其他问题(它说目标“ pack”在项目中不存在)。
有人对我有什么建议吗?如果有帮助,我想通过TeamCity进行此操作,但是所有这些问题也都存在于我的开发机器上。
首先,如果要使用这些dotnet
工具,则需要创建仅包含c#项目的第二个解决方案。如果您不想执行此操作,则始终可以直接从VS 2017开发人员命令提示符(dotnet restore
=>msbuild /t:Restore
等)直接使用msbuild命令。
该Pack
目标仅适用于具有集成NuGet软件包支持的项目,该项目通过使用Microsoft.NET.Sdk
SDK(“新” csproj格式)或在NuGet.Build.Tasks.Pack
与其兼容的项目中使用nuget软件包来实现。
如果要在解决方案上调用dotnet pack
/msbuild /t:Pack
而不在没有sql项目的情况下创建第二个解决方案,则所有项目都必须包含一个包目标。
一种简单的方法是Directory.Build.props
在解决方案旁边创建一个包含以下内容的文件:
<Project>
<Target Name="Pack" />
</Project>
该文件将自动导入目录层次结构中所有项目的开头,并Pack
在其中定义一个空目标。然后,使用.NET SDK的项目将使用实际的NuGet包目标覆盖此目标。因此,msbuild /t:Pack
将在SQL项目上将此空目标和Pack
在c#项目上称为原始NuGet目标。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句