我编写了一个类似于MSBuild的这一个任务,但是我的任务引用了System.Data.SqlClient。
因此,我使用dotnet发布来针对特定的框架netcoreapp2.0来获取bin dir中的依赖项。
这方面的问题是,当我通过获得的msbuild脚本运行任务时:error : System.Data.SqlClient is not supported on this platform.
构建引擎:Microsoft (R) Build Engine version 15.7.177.53362 for .NET Core。
首席执行官:
<Project DefaultTargets="Build">
<UsingTask TaskName="TestTasks.TestSqlClient" AssemblyFile=".\Task\bin\Debug\netcoreapp2.0\publish\TestTask.dll" />
<Target Name="Build">
<TestSqlClient />
</Target>
</Project>bin\netcoreapp2.0\publish下的文件和dirs列表
| Microsoft.Build.Framework.dll
| Microsoft.Build.Utilities.Core.dll
| System.Data.SqlClient.dll
| System.Text.Encoding.CodePages.dll
| TestTask.deps.json
| TestTask.dll
| TestTask.pdb
|
\---runtimes
+---unix
| \---lib
| \---netstandard2.0
| System.Data.SqlClient.dll
|
+---win
| \---lib
| +---netcoreapp2.0
| | System.Text.Encoding.CodePages.dll
| |
| \---netstandard2.0
| System.Data.SqlClient.dll
|
+---win-arm64
| \---native
| sni.dll
|
+---win-x64
| \---native
| sni.dll
|
\---win-x86
\---native
sni.dll发布于 2018-05-13 16:33:52
看来您已经碰到https://github.com/Microsoft/msbuild/issues/1887了。使用MSBuild任务中的依赖项的当前限制之一是,MSBuild不会加载本机依赖项。正如您在输出中所看到的,有一个“运行时”文件夹,其中包含sni.dll for x86、x64等。在.NET核心上解决此问题的唯一方法是使用程序集加载上下文手动解决本机依赖关系。这是很难做正确的,我不推荐它。有关更多详细信息,请参阅https://natemcmaster.com/blog/2017/11/11/msbuild-task-with-dependencies/。
一个更简单的解决方法是将您的工具实现为控制台工具。然后使用目标和Exec任务,或ToolTask的自定义实现,在构建期间运行控制台工具。这就是C#编译器本身的工作原理,我在这里更详细地描述了这种方法:https://natemcmaster.com/blog/2017/11/11/build-tools-in-nuget/。另外,请参阅https://github.com/natemcmaster/Yarn.MSBuild获取一个真实世界的示例。
https://stackoverflow.com/questions/50317310
复制相似问题