[英]How to load VS Database Project from .NET Core app?
There is an Visual Studio SQL Server Database Project with such import lines inside.sqlproj file by default:默认情况下,Visual Studio SQL 服务器数据库项目在 .sqlproj 文件中包含这样的导入行:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
Although there are no directories with SSDT for VisualStudioVersion 11.0, it opens correctly from Visual Studio.尽管 VisualStudioVersion 11.0 没有包含 SSDT 的目录,但它可以从 Visual Studio 正确打开。 But when trying to load the project from .NET Core application using Microsoft.Build package it throws an error:
但是,当尝试使用 Microsoft.Build package 从 .NET 核心应用程序加载项目时,它会引发错误:
The imported project "D:\TestApp\TestApp\bin\Debug\netcoreapp3.1\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found.
未找到导入的项目“D:\TestApp\TestApp\bin\Debug\netcoreapp3.1\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets”。 Confirm that the expression in the Import declaration "D:\TestApp\TestApp\bin\Debug\netcoreapp3.1\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" is correct, and that the file exists on disk.
确认导入声明“D:\TestApp\TestApp\bin\Debug\netcoreapp3.1\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets”中的表达式是正确的,并且该文件存在于磁盘上。
D:\Database1\Database1\Database1.sqlprojD:\Database1\Database1\Database1.sqlproj
The code for project loading looks like项目加载的代码看起来像
var project = new Microsoft.Build.Evaluation.Project(@"D:\Database1\Database1\Database1.sqlproj");
All I want is to add some items into the project using AddItem method and then Save it.
我想要的只是使用 AddItem 方法将一些项目添加到项目中,然后保存它。
As I said, you can ignore missed imports, and I believe that this will prevent errors from occurring, for this you can use the following overload of the Project constructor:正如我所说,您可以忽略错过的导入,并且我相信这将防止发生错误,为此您可以使用Project构造函数的以下重载:
public Project (string projectFile, System.Collections.Generic.IDictionary<string,string> globalProperties, string toolsVersion, Microsoft.Build.Evaluation.ProjectCollection projectCollection, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings);
Set loadSettings
to IgnoreMissingImports
:将
loadSettings
设置为IgnoreMissingImports
:
/// <summary>
/// Flags for controlling the project load.
/// </summary>
/// <remarks>
/// This is a "flags" enum, allowing future settings to be added
/// in an additive, non breaking fashion.
/// </remarks>
[Flags]
[SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Justification = "Public API. 'Default' is roughly equivalent to 'None'. ")]
public enum ProjectLoadSettings
{
/// <summary>
/// Normal load. This is the default.
/// </summary>
Default = 0,
/// <summary>
/// Ignore nonexistent targets files when evaluating the project
/// </summary>
IgnoreMissingImports = 1,
/// <summary>
/// Record imports including duplicate, but not circular, imports on the ImportsIncludingDuplicates property
/// </summary>
RecordDuplicateButNotCircularImports = 2,
/// <summary>
/// Throw an exception and stop the evaluation of a project if any circular imports are detected
/// </summary>
RejectCircularImports = 4,
/// <summary>
/// Record the item elements that got evaluated
/// </summary>
RecordEvaluatedItemElements = 8,
/// <summary>
/// Ignore empty targets files when evaluating the project
/// </summary>
IgnoreEmptyImports = 16,
/// <summary>
/// By default, evaluations performed via <see cref="Project"/> evaluate and collect elements whose conditions were false (e.g. <see cref="Project.ItemsIgnoringCondition"/>).
/// This flag turns off this behaviour. <see cref="Project"/> members that collect such elements will throw when accessed.
/// </summary>
DoNotEvaluateElementsWithFalseCondition = 32,
/// <summary>
/// Ignore invalid target files when evaluating the project
/// </summary>
IgnoreInvalidImports = 64,
/// <summary>
/// Whether to profile the evaluation
/// </summary>
ProfileEvaluation = 128,
}
ProjectLoadSettings Enum | ProjectLoadSettings 枚举| ProjectLoadSettings Enum [Github]
ProjectLoadSettings 枚举[Github]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.