我正在Windows 7 64位上的Visual Studio 2010中编译MVC2应用程序。我正在运行以下作为构建后事件命令:
aspnet_compiler.exe -v / -p \
导致以下错误: -
The CodeDom provider type "Microsoft.VJSharp.VJSharpCodeProvider, VJSharpCodeProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" could not be located
我的解决方案中没有J#。我已经下载了J#2.0可再发行软件包第二版,但这没有帮助。
有趣的是,我在一个全新的MVC2解决方案中运行了这个并得到了同样的错误!所以它与我的应用程序无关。
我错过了什么导致此错误?
我已经阅读了许多其他帖子,说你需要安装可再发行组件,在web.config等中添加引用但是它们没有帮助。
任何想法??
答案 0 :(得分:3)
我今天发生了这种情况,并找到了各种解决方案。
我正在使用VS 2010和使用Razor的ASP.NET MVC 3站点,在IIS中运行(不是IIS Express或Cassini)。
在我的情况下,我的.cshtml视图中出现了此错误。对于我打开的任何视图,第一个@using
行被突出显示错误:
C:\ PathToMyCode \ PathToMyViews \ Index.cshtml:ASP.NET运行时错误:无法加载文件或程序集'VJSharpCodeProvider,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。发生了与安全性有关的错误。 (HRESULT异常:0x8013150A)
整个页面中也存在奇怪的错误,例如两个具有相同名称的程序集之间的模糊引用(例如,“System.Web.Helpers”和“System.Web.Helpers”之间存在冲突)。
原因:我在没有足够权限的用户帐户下运行网站。该帐户具有IIS_IUSRS角色,但显然还有其他一些角色或访问需要进行这项工作,或者它可能需要访问它无法访问的特定文件夹。
不幸的是,我不知道它是什么,而且在我已经花了太多时间试图弄清楚这是怎么发生之后,我不想浪费时间来弄清楚它。
但为该用户提供管理员角色解决了错误。
我意识到这不是一个理想的解决方案,但我希望至少会让一些人失意。如果有人确切地确定了防止此错误所需的权限,请在下面进行评论,也许我们可以将其缩小范围。
答案 1 :(得分:1)
@Adrian - 我今天遇到了这个问题并且几乎马上解决了它,它试图在C#项目中编译J#,这是一个奇怪的错误。但问题是我将.java文件复制到我的项目文件夹中,并且出现了问题。一旦我删除它,它再次编译得很好。
答案 2 :(得分:1)
@Kyralessa:我有完全相同的错误。将管理员角色添加到运行网站的用户“修复”了问题,但正如您所说,这不是一个理想的解决方案。
所以我正在摆弄IIS设置,在网站的基本设置下,我切换到“应用程序用户(传递身份验证)”,问题就消失了。应用程序池仍然在同一个(非管理员)用户下运行,因此没有安全问题。
答案 3 :(得分:0)
尝试安装以下其中一个软件包:
32位:http://www.microsoft.com/download/en/details.aspx?id=18084
64位:http://www.microsoft.com/download/en/confirmation.aspx?id=15468
当其他任何解决方案都不起作用时,这让我超越了错误。
答案 4 :(得分:0)
当我将csproj中的MvcBuildViews属性设置为true时,我遇到了同样的错误。经过大量的研究和试验/错误,我了解到问题是因为我们的网站在网站的结构中有.java文件。这些java文件不是解决方案的一部分,只是松散的文件。 Aspnetcompiler任务从项目根目录运行,因此它可以找到各种问题,例如重复的web.configs和* .java文件。
为了解决这个问题,我在我试图调试的MVC项目文件中创建了以下目标:
<Target Name="MvcBuildViews" AfterTargets="Build" Condition="'$(MvcBuildViews)'=='true'">
<!-- This task performs compilation of the CSHTML files in the web structure
and will generate compiler errors if there are issues in the views, such as missing
resource strings, broken class locations, etc.
Due to an issue with the AspNetCompiler task identifing .java files as candidates for
compilation, we will temporarily rename all of the java files in the project to .xyz
so they are skipped by aspnet compiler. Then we rename them back.
Extra web.configs also cause an error, so those are temporarily moved. -->
<CreateItem Include="$(ProjectDir)**\*.java">
<Output TaskParameter="Include" ItemName="JavaFolderA"/>
</CreateItem>
<CreateItem Include="$(ProjectDir)obj\**\web.config">
<Output TaskParameter="Include" ItemName="ExtraWebConfigsA"/>
</CreateItem>
<Move SourceFiles="@(JavaFolderA)" DestinationFiles="@(JavaFolderA->'$(ProjectDir)%(RecursiveDir)%(FileName).xyz')"/>
<Move SourceFiles="@(ExtraWebConfigsA)" DestinationFiles="@(ExtraWebConfigsA->'$(ProjectDir)%(RecursiveDir)%(FileName).ccc')"/>
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
<CreateItem Include="$(ProjectDir)**\*.xyz">
<Output TaskParameter="Include" ItemName="JavaFolderB"/>
</CreateItem>
<CreateItem Include="$(ProjectDir)obj\**\web.ccc">
<Output TaskParameter="Include" ItemName="ExtraWebConfigsB"/>
</CreateItem>
<Move SourceFiles="@(JavaFolderB)" DestinationFiles="@(JavaFolderB->'$(ProjectDir)%(RecursiveDir)%(FileName).java')"/>
<Move SourceFiles="@(ExtraWebConfigsB)" DestinationFiles="@(ExtraWebConfigsB->'$(ProjectDir)%(RecursiveDir)%(FileName).config')"/>
</Target>
希望这可以节省一些人花了3个小时来弄明白...
更新: 因为这确实为构建添加了更多时间,所以您可以选择添加到顶部的条件,仅在发布样式构建期间执行此检查:
<Target Name="MvcBuildViews" AfterTargets="Build" Condition="'$(MvcBuildViews)'=='true' AND '$(Configuration)' == 'Release'">