"指定的强制转换无效"仅适用于MS版本的发布版本

Ani*_*ish 3 .net c# msbuild il visual-studio

当只从MSBuild 4.0进行发布构建时,我收到"指定的强制转换无效"有效.我在使用Visual Studio 2012的发布版本时对此进行了测试,但没有遇到此问题.我还使用MSBuild 4.0的调试版本对此进行了测试,但没有遇到此问题.

例外: 在此输入图像描述

    public abstract class CachedSessionBase : ISessionObject
{
    protected Dictionary<MethodBase, Object> _getAndSetCache = new Dictionary<MethodBase, object>();

    protected TResult SetAndGet<TResult>(ObjectFactory factory, Func<TResult> func)
    {
        StackTrace stackTrace = new StackTrace();
        var methodBase = stackTrace.GetFrame(1).GetMethod();

        if (!_getAndSetCache.ContainsKey(methodBase))
        {
            _getAndSetCache[methodBase] = func.Invoke();
        }

        return (TResult)_getAndSetCache[methodBase];
    }
Run Code Online (Sandbox Code Playgroud)

错误正在这条线上抛出

return (TResult)_getAndSetCache[methodBase];
Run Code Online (Sandbox Code Playgroud)

Mik*_*ray 6

调用堆栈可能与您期望的不同.您的方法可能会被内联,然后GetFrame(1)检索调用者的调用者.从字典中检索值时,它的类型不同,因为它适用于不同的方法.

您可以尝试添加该属性[MethodImpl(MethodImplOptions.NoInlining]SetAndGet防止该方法的内联优化.


Ste*_*uck 5

运行nuget pack调用时我遇到了同样的问题

MSBuild自动检测:使用msbuild版本'15 .0'...

但问题是通过运行dotnet pack调用解决的

用于.NET Core的Microsoft(R)Build Engine版本15.3.409.57025