我正在使用Microsoft TFS API,其中一个接口上的某个属性已标记为已过时,它指示我使用其他属性.不幸的是,API要我使用的属性由TFS2010而不是TFS2008使用.
我试过这样做:
#pragma warning disable 0612, 0618
request.CommandLineArguments = arguments;
#pragma warning restore 0612, 0618
Run Code Online (Sandbox Code Playgroud)
但我仍然得到CommandLineArguments已经过时的错误.反正有压制这个吗?
编辑
不幸的是,这并没有显示为"警告错误",实际上在我的项目中关闭了警告错误.以下是违规代码的屏幕上限以及错误列表

编辑2:
使用ILSpy后,CommandLineArguments属性在TFS2010 API中如下所示:
[Obsolete("This property has been deprecated. Please remove all references. To pass command line arguments to MSBuild.exe, set the ProcessParameters property.", true)]
string CommandLineArguments
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我认为没有办法告诉编译器忽略Obsolete属性导致的错误.
编辑3正如@Peter Ritchie指出的那样,这个值可以通过反射来设定.我想通过这个问题虽然我的猜测是,如果微软将属性设置为抛出异常,即使你通过反射设置它,我怀疑该值会被引用到任何地方.
Pet*_*hie 14
以下为我工作:
#pragma warning disable 612,618
request.CommandLineArguments = arguments;
#pragma warning restore 612,618
Run Code Online (Sandbox Code Playgroud)
注意数字中没有前导0
编辑:好的,你的程序集在ObsoleteAttribute构造函数中有"true"参数.这意味着您无法使用该属性而不会收到错误.
如果您无法重写代码以避免使用此属性,则必须通过反射调用属性setter,例如:
request.GetType().GetProperty("Number").SetValue(request, arguments, null);
Run Code Online (Sandbox Code Playgroud)
和获得是相似的:
(string)request.GetType().GetProperty("CommandLineArguments").GetValue(request,null);
Con*_*ngo 13
由于[已废弃]而构建失败?
仅当启用"将警告视为错误"并且存在具有[已废弃]属性的方法时,才会出现这种情况.
添加<WarningsNotAsErrors>612,618</WarningsNotAsErrors>了在.csproj文件(重复所有部分):
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<WarningsNotAsErrors>612,618</WarningsNotAsErrors>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
如果处理很多.csproj files,请参阅Appendix A: Notepad++ for search and replace.
注意:建议不要使用此方法,因为它会隐藏标记为[已废弃]的方法的警告.我们仍然希望看到所有对过时方法的调用列表,以便我们可以升级它们.
使用 #pragma warning disable 612,618
注意:建议不要使用此方法,因为它会隐藏标记为[已废弃]的方法的警告.我们仍然希望看到所有对过时方法的调用列表,以便我们可以升级它们.
编辑项目(对所有部分重复):
注意:建议不要使用此方法,因为它会隐藏标记为[已废弃]的方法的警告.我们仍然希望看到所有对过时方法的调用列表,以便我们可以升级它们.
手动编辑.csproj以禁用特定错误的警告.添加标签<NoWarn>612,618</NoWarn>(对所有部分重复):
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<NoWarn>612,618</NoWarn>
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
有很多文件?没问题!
.csproj在NotePad ++中打开所有文件,然后:
<TreatWarningsAsErrors>true</TreatWarningsAsErrors><TreatWarningsAsErrors>true</TreatWarningsAsErrors>\n\t<WarningsNotAsErrors>612,618</WarningsNotAsErrors>以防万一其他人偶然发现了这一点。
如果您将设置属性的方法标记为 Obsolete 并且不要将其标记为 true,则编译器将忽略内部错误,并抛出您可以忽略的更高级别的警告。
IE
[Obsolete("Cause it aint",false)]
public void Foo(object arguments)
{
request.CommandLineArguments = arguments;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13413 次 |
| 最近记录: |