使用 Visual Studio 2017 RC 开发自定义 MSBuild 任务时,我遇到以下问题:只要添加其他依赖项,而不仅仅是Microsoft.Build.Utilities.Core
(使用 v15.1.0-preview-000458-02 进行 .NET Core 支持),我无法将任务加载到另一个 .csproj MSBuild 项目中,因为找不到依赖项。
有没有办法自动将所有依赖项复制到 Debug 文件夹?
或者我每次想测试时都必须发布它?
Update1:
发布问题是我的环境中的本地问题,并且已得到修复。
Update2:
看来,一旦我将 TargetFramework 从 netstandard1.4 更改为 netstandard1.6,它甚至根本无法加载任务。一旦我使用 netstandard 1.6,它就会抛出异常:
The task could not be loaded from the assembly.
Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its
dependencies.
有没有办法自动将所有依赖项复制到 Debug 文件夹?或者做
我每次想测试都必须发布它吗?
默认情况下,出于充分的原因,.NET Core 和 .NET Standard 项目不会将引用的程序集复制到生成文件夹中。相反,它们是从 NuGet 缓存中解析的。
但如果您确实需要它,可以通过使用覆盖默认值来更改此行为CopyLocalLockFileAssemblies
环境。
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
Cref: https://github.com/dotnet/sdk/blob/d20405f91a2959fa91fea6285d9a896286727f2a/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.Sdk.BeforeCommon.targets#L55-L56 https://github.com/dotnet/sdk/blob/d20405f91a2959fa91fea6285d9a896286727f2a/src/Tasks/Microsoft.NET.Build.Tasks/build/Microsoft.NET.Sdk.BeforeCommon.targets#L55-L56
第二个问题
似乎只要我将 TargetFramework 从 netstandard1.4 更改为 netstandard1.6
要构建可在“MSBuild.exe”和“dotnet.exe msbuild”上运行的任务程序集,您应该以 netstandard1.4 或更低版本为目标。 netstandard1.6 与 .NET Framework 4.6.1(MSBuild.exe 在其上运行)不兼容。
如果您需要 netstandard1.4 中未提供的 API,则需要针对 .NET Framework 和 .NET Standard 交叉编译您的任务,这要复杂得多,但可以完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)