Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MSBuild中将字符串编码为Base64_Msbuild_Base64 - Fatal编程技术网

在MSBuild中将字符串编码为Base64

在MSBuild中将字符串编码为Base64,msbuild,base64,Msbuild,Base64,我想在msbuild目标中将字符串转换为base64,但msbuild告诉我类型转换不可用 <ItemGroup> <Headers Include="Authorization"> <Content>$([Convert]::ToBase64String(&quot;user:password&quot;))</Content> </Headers> </ItemGroup> $([Co

我想在msbuild目标中将字符串转换为base64,但msbuild告诉我类型转换不可用

<ItemGroup>
  <Headers Include="Authorization">
    <Content>$([Convert]::ToBase64String(&quot;user:password&quot;))</Content>
  </Headers>
</ItemGroup>

$([Convert]::tobase64字符串(“用户:密码”))
有人能帮我吗

编辑:

找到了一个我不喜欢的解决方案:

<UsingTask TaskName="ToBase64" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
    <ParameterGroup>
      <In ParameterType="System.String" Required="true" />
      <Out ParameterType="System.String" Output="true" />
    </ParameterGroup>
  <Task>
    <Code Type="Fragment" Language="cs">
      Out = System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(In));
    </Code>
  </Task>
</UsingTask>

<Target Name="WebRequest">
  <ToBase64 In="$(auth)">
    <Output PropertyName="authBase64" TaskParameter="Out" />
  </ToBase64>
</Target>


Out=System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(In));


有更好的方法吗?

您不能使用MSBuild属性函数执行任何您想要的操作。有一些限制,其中之一是只能使用少数命名空间。您在这里有完整的列表:

您的问题是需要
System.Text.Encoding
名称空间(以获取字符串的字节数组),但该名称空间不受支持

作为证明:

<ItemGroup>
  <Headers Include="Authorization">
    <Content>$([System.Convert]::ToBase64String($([System.Text.Encoding]::Default.GetBytes("user:password"))))</Content>
  </Headers>
</ItemGroup>


<Target Name="Deploy" >
    <Message Text="@(Headers->'%(Content)')" Importance="high" />
</Target>

出于维护原因,我建议您坚持使用详细的任务方法,因为不支持此环境变量。

为什么您不喜欢此解决方案?oneliner的代码太多,我希望这样做:
D:\set MSBUILDENABLEALLPROPERTYFUNCTIONS=1
D:\>c:\windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe test.proj
Project "D:\test.proj" on node 1 (default targets).
Deploy:
  dXNlcjpwYXNzd29yZA==
Done Building Project "D:\test.proj" (default targets).