在这个问题的回复中解释了如何InternalsVisibleTo在csproj 中设置。
我认为这也适用于CLSCompliant:
<ItemGroup>
<AssemblyAttribute Include="System.CLSCompliant">
<_Parameter1>true</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但不是!MSBuild的抱怨true不能转换从string到bool:
> dotnet build
Microsoft (R) Build Engine version 16.4.0+e901037fe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 418.35 ms for C:\Users\coder\OneDrive\Projects\pickall\src\PickAll.Sample\PickAll.Sample.csproj.
Restore completed in 418.33 ms for C:\Users\coder\OneDrive\Projects\pickall\src\PickAll.Specs\PickAll.Specs.csproj.
Restore completed in 418.33 ms for C:\Users\coder\OneDrive\Projects\pickall\src\PickAll\PickAll.csproj.
obj\Debug\netstandard2.0\PickAll.AssemblyInfo.cs(14,32): error CS1503: Argument 1: cannot convert from 'string' to 'bool' [C:\Users\coder\OneDrive\Projects\pickall\src\PickAll\PickAll.csproj]
obj\Debug\net461\PickAll.AssemblyInfo.cs(14,32): error CS1503: Argument 1: cannot convert from 'string' to 'bool' [C:\Users\coder\OneDrive\Projects\pickall\src\PickAll\PickAll.csproj]
Build FAILED.
obj\Debug\netstandard2.0\PickAll.AssemblyInfo.cs(14,32): error CS1503: Argument 1: cannot convert from 'string' to 'bool' [C:\Users\coder\OneDrive\Projects\pickall\src\PickAll\PickAll.csproj]
obj\Debug\net461\PickAll.AssemblyInfo.cs(14,32): error CS1503: Argument 1: cannot convert from 'string' to 'bool' [C:\Users\coder\OneDrive\Projects\pickall\src\PickAll\PickAll.csproj]
0 Warning(s)
2 Error(s)
Time Elapsed 00:00:18.37
Run Code Online (Sandbox Code Playgroud)
有没有办法在标签内正确写入布尔文字_Parameter1?
Hak*_*tık 22
解决方案1
<ItemGroup>
<AssemblyAttribute Include="System.CLSCompliant">
<_Parameter1>true</_Parameter1>
<_Parameter1_TypeName>System.Boolean</_Parameter1_TypeName>
</AssemblyAttribute>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
解决方案2
<ItemGroup>
<AssemblyAttribute Include="System.CLSCompliant">
<_Parameter1>true</_Parameter1>
<_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
</AssemblyAttribute>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
解决方案3
来自@cremore 的评论:
如果您编写完整的类名 ,
CLSCompliantAttribute即使没有附加的_Parameter1_TypeName或_Parameter1_IsLiteral标签,它也可以工作。
<ItemGroup>
<AssemblyAttribute Include="System.CLSCompliantAttribute">
<_Parameter1>true</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
重要笔记:
拉取请求(允许为 WriteCodeFragment 任务指定参数类型名称)最近已合并到 MSBuild 存储库中,该请求可以完全按照原始问题中的描述在 csproj 文件中标记程序集 CLSCompliant。
它应该很快(2021 年 5 月)在 16.10 预览版 3 中可用(不确定是指 MSBuild 版本还是 Visual Studio 版本)。从提到的拉取请求评论中引用用户 Forgind:
这应该在 16.10 预览版 3 中可用。我会尽量记住在可用时在此线程中 ping 您。那应该是大约一个月后。
似乎无法在 .csproj 文件中执行此操作。
在链接的 GitHub 问题的评论中,多次提出并拒绝了多种解决方案。
唯一的解决方案是添加一个空的 csharp 文件并在其中指定程序集属性。
例如,在 ArbitraryFileName.cs 中:
using System;
[assembly: CLSCompliant(true)]
Run Code Online (Sandbox Code Playgroud)
您可能应该将此文件命名为 AssemblyInfo.cs,但实际名称是什么并不重要。
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |