错误MSB4175:任务工厂" CodeTaskFactory"无法从程序集

时间:2018-05-30 11:56:31

标签: windows msbuild windows-10 gitlab gitlab-ci-runner

我的.csproj文件中有一个目标,如下所示:

<UsingTask TaskName="GetPackageVersion" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<ParameterGroup>
  <FileName ParameterType="System.String" Required="true" />
  <PackageVersion ParameterType="System.String" Output="true" />
</ParameterGroup>
<Task>
  <Reference Include="System.Xml" />
  <Reference Include="System.Xml.Linq" />
  <Using Namespace="System.IO" />
  <Using Namespace="System.Xml.Linq" />
  <Code Type="Fragment" Language="cs"><![CDATA[
  var doc = XDocument.Load(FileName);
  var defaultNamespace = doc.Root.GetDefaultNamespace();
  PackageVersion = doc.Root.Element(defaultNamespace.GetName("Identity")).Attribute("Version").Value;
]]>
</Code>
</Task>
</UsingTask>
<Target Name="GetZip">
<GetPackageVersion Filename="Package.appxmanifest">
  <Output PropertyName="PackageVersion" TaskParameter="PackageVersion" />
</GetPackageVersion>
<ItemGroup>
  <BinDirectoryFiles Include="$(MSBuildProjectDirectory)\AppPackages\MyApp_$(PackageVersion)_x86_MyApp_Test\**\*.*" />
</ItemGroup>
<Zip Files="@(BinDirectoryFiles)" WorkingDirectory="$(MSBuildProjectDirectory)\AppPackages\MyApp_$(PackageVersion)_x86_MyApp_Test" ZipFileName="$(MSBuildProjectDirectory)\Zip\MyApp_$(PackageVersion).zip" />
</Target>

我的项目在GitLab上,并在我提交时自动构建。 该项目构建没有任何问题,应该压缩apppackages。一开始它工作正常,但在我的虚拟机上安装最新的Windows 10版本(1803)之后,它在Zip目标上失败并出现此错误:

  

C:\ Multi-Runner \ builds \ 9fca3796 \ 0 \ mobile \ mail-windows \ MyApp \ MyApp.csproj(657,5):错误MSB4175:任务工厂&#34; CodeTaskFactory&#34;无法从程序集加载&#34; C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ bin \ Microsoft.Build.Tasks.Core.dll&#34;。客户不持有所需的权限

我不知道它为什么会出现。我没有改变任何事情。我不得不说,如果我从我的VM上的命令提示符调用目标而不是它的工作。

2 个答案:

答案 0 :(得分:0)

在最新版本的Windows 10中,默认构建位置C:\ gitlab-runner \ builds受到保护。一种解决方案是通过将build_dir行添加到config.toml文件的runners部分,将builds目录移动到runner用户的主文件夹中。转义的反斜杠需要正确解析.toml中的路径。

builds_dir =&#34; c:\\ Users \\ gitlab-ci-users \\ builds&#34;

我必须重新启动我的gitlab服务才能使此更改生效。

答案 1 :(得分:0)

我击中了类似的东西,但是没有在我的机器上(在另一个团队中)击中。从CodeTaskFactory切换到RoslyCodeTaskFactory可以为我们修复此问题(但无法使用MSBuild <15.8构建)

https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-roslyncodetaskfactory?view=vs-2019