.net 4.0 msbuild ASPNETCOMPILER ASPNETRUNTIME startIndex错误

.net 4.0 msbuild ASPNETCOMPILER ASPNETRUNTIME startIndex错误,.net-4.0,msbuild,windows-8,compiler-errors,aspnet-compiler,.net 4.0,Msbuild,Windows 8,Compiler Errors,Aspnet Compiler,我有一个在Windows7上构建良好的web项目,没有错误。当我升级到Windows 8时,将项目编译到已编译的网站会抛出一个错误。从csproj文件编译(不创建网站)效果很好。这是msbuild引发的实际错误 ASPNETCOMPILER:错误ASPRUNTIME:startIndex不能大于字符串的长度。[mycsproj.file.here] 引发错误的msbuild正在运行的行为 C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet\u

我有一个在Windows7上构建良好的web项目,没有错误。当我升级到Windows 8时,将项目编译到已编译的网站会抛出一个错误。从csproj文件编译(不创建网站)效果很好。这是msbuild引发的实际错误

ASPNETCOMPILER:错误ASPRUNTIME:startIndex不能大于字符串的长度。[mycsproj.file.here]

引发错误的msbuild正在运行的行为

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet\u compiler.exe-v/-p my.physical.project.path-u my.physical.project.path\buildartifacts\CompiledWebsite

我还可以通过运行带有-errorstack标记的aspnet_编译器获得堆栈跟踪,这就是它生成的

[ArgumentOutOfRangeException]: startIndex cannot be larger than length of string.
Parameter name: startIndex
    at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
    at System.Web.Compilation.DiskBuildResultCache.MarkAssemblyAndRelatedFilesForDeletion(String assemblyName)
    at System.Web.Compilation.DiskBuildResultCache.CacheBuildResult(String cacheKey, BuildResult result, Int64 hashCode, DateTime utcStart)
    at System.Web.Compilation.BuildManager.CacheBuildResultInternal(String cacheKey, BuildResult result, Int64 hashCode, DateTime utcStart)
    at System.Web.Compilation.WebDirectoryBatchCompiler.CacheAssemblyResults(AssemblyBuilder assemblyBuilder, CompilerResults results)
    at System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder(AssemblyBuilder builder)
    at System.Web.Compilation.WebDirectoryBatchCompiler.<CompileNonDependentBuildProviders>b__0(AssemblyBuilder assemblyBuilder)
    at System.Web.Compilation.CompilationUtil.CompileParallel(ICollection assemblyBuilders, Action`1 action)
    at System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(ICollection buildProviders)
    at System.Web.Compilation.WebDirectoryBatchCompiler.Process()
    at System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(VirtualDirectory vdir, Boolean ignoreErrors)
    at System.Web.Compilation.BuildManager.BatchCompileWebDirectory(VirtualDirectory vdir, VirtualPath virtualDir, Boolean ignoreErrors)
    at System.Web.Compilation.BuildManager.PrecompileWebDirectoriesRecursive(VirtualDirectory vdir, Boolean topLevel)
    at System.Web.Compilation.BuildManager.PrecompileAppInternal(VirtualPath startingVirtualDir, IEnumerable`1 excludedVirtualPaths)
    at System.Web.Compilation.BuildManager.PrecompileApp(VirtualPath startingVirtualDir, IEnumerable`1 excludedVirtualPaths)
    at System.Web.Compilation.BuildManager.PrecompileApp(ClientBuildManagerCallback callback, IEnumerable`1 excludedVirtualPaths)
    at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback callback, List`1 excludedVirtualPaths)
    at System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback callback, List`1 excludedVirtualPaths)
    at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback, Boolean forceCleanBuild)
    at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManagerCallback callback)
    at System.Web.Compilation.Precompiler.Main(String[] args)
[ArgumentOutOfRangeException]:startIndex不能大于字符串的长度。
参数名称:startIndex
在System.String.InternalSubStringWithChecks处(Int32 startIndex、Int32 length、布尔值)
位于System.Web.Compilation.DiskBuildResultCache.MarkAssemblyandLatedFilesForDelete(字符串assemblyName)
位于System.Web.Compilation.DiskBuildResultCache.CacheBuildResult(字符串cacheKey、BuildResult结果、Int64 hashCode、DateTime utcStart)
位于System.Web.Compilation.BuildManager.CacheBuildResultInternal(字符串cacheKey、BuildResult结果、Int64哈希代码、DateTime utcStart)
位于System.Web.Compilation.WebDirectoryBatchCompiler.CacheSassemblyResults(AssemblyBuilder AssemblyBuilder,CompilerResults结果)
位于System.Web.Compilation.WebDirectoryBatchCompiler.CompileAseMblyBuilder(AssemblyBuilder)
在System.Web.Compilation.WebDirectoryBatchCompiler.b_u0(汇编生成器汇编生成器)中
在System.Web.Compilation.CompilationUtil.CompileParallel(ICollection assemblyBuilders,Action`1 Action)
位于System.Web.Compilation.WebDirectoryBatchCompiler.CompilenIndependentBuildProviders(ICollection buildProviders)
在System.Web.Compilation.WebDirectoryBatchCompiler.Process()中
位于System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(虚拟目录vdir,布尔值ignoreErrors)
位于System.Web.Compilation.BuildManager.BatchCompileWebDirectory(VirtualDirectory vdir、VirtualPath virtualDir、Boolean ignoreErrors)
位于System.Web.Compilation.BuildManager.PrecompileWebDirectoriesRecursive(虚拟目录vdir,布尔顶级)
在System.Web.Compilation.BuildManager.PrecompileAppInternal(VirtualPath开始VirtualDir,IEnumerable`1排除VirtualPath)
在System.Web.Compilation.BuildManager.PrecompileApp(VirtualPath开始VirtualDir,IEnumerable`1排除VirtualPath)
在System.Web.Compilation.BuildManager.PrecompileApp(ClientBuildManager回调,IEnumerable`1 ExcludedVirtualPath)
在System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback回调,列表'1 ExcludedVirtualPath)
在System.Web.Compilation.BuildManagerHost.PrecompileApp(ClientBuildManagerCallback回调,列表'1 ExcludedVirtualPath)
位于System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManager回调,布尔forceCleanBuild)
位于System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuildManager回调)
位于System.Web.Compilation.Precompiler.Main(字符串[]args)

我该如何解决这个问题?由于堆栈跟踪,我假设它与程序集名称有关,但我一辈子都不知道如何修复它。有人能帮我吗?

使用Visual Studio运行“清理”,然后运行“重建”。这为我解决了问题。

您找到解决方案了吗?我遇到了一个类似的问题。它与我的解决方案中的一些自定义编译目标有关。由于.net 4.0的运行时在win8中被4.5取代,因此最初出现了一些问题。现在看来一切正常,我假设对框架的一些更新纠正了这个问题。尝试从您的解决方案中删除任何自定义目标,看看是否有效。在我们的例子中,.ashx文件不知何故是原因。我删除了处理程序的标记,并将其添加到web.config作为解决方法。哦,很高兴知道,谢谢分享!未为我修复它:
错误46 startIndex不能大于字符数组ASPNETCOMPILER 0的长度
已为我修复。我还得做一个IISReset