3

当仅从 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];
    }

错误正在这条线上抛出

return (TResult)_getAndSetCache[methodBase];
4

2 回答 2

6

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

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

于 2013-01-09T16:57:15.847 回答
5

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

MSBuild 自动检测:使用 msbuild 版本“15.0”...

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

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

于 2017-10-17T17:01:35.013 回答