4

我正在 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 可再发行包 Second Edition,但这并没有帮助。

有趣的是,我在一个全新的 MVC2 解决方案中运行它并得到了同样的错误!所以这与我的申请无关。

我错过了什么导致这个错误?

我已经阅读了许多其他帖子,说您需要安装可再发行组件,在 web.config 中添加参考等,但它们没有帮助。

有任何想法吗??

4

5 回答 5

3

我今天发生了这种情况,并找到了某种解决方案。

我正在使用 VS 2010 和 ASP.NET MVC 3 站点,使用 Razor,在 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 角色,但显然它需要其他角色或访问权限才能使其正常工作,或者它可能需要访问它无法访问的特定文件夹。

不幸的是,我不知道它是什么,而且在我已经花了太多时间试图弄清楚这首先是如何发生的之后,我对浪费时间来弄清楚它的想法并不感到兴奋。

但是给那个用户管理员角色解决了这个错误

我意识到这不是一个理想的解决方案,但我希望至少它能让一些人摆脱困境。如果有人确切地知道防止此错误所需的权限,请在下面发表评论,也许我们可以缩小范围。

于 2011-05-10T22:43:13.670 回答
1

@Kyralessa:我遇到了完全相同的错误。将管理员角色添加到运行网站的用户“修复”了问题,但正如您所说,这不是一个理想的解决方案。

所以我在摆弄 IIS 设置,在网站的基本设置下,我切换到“应用程序用户(直通身份验证)”,问题就消失了。应用程序池仍然在同一(非管理员)用户下运行,因此不存在安全问题。

于 2012-01-17T08:55:46.233 回答
1

@Adrian - 我今天遇到了这个问题,几乎马上就解决了,它试图在 C# 项目中编译 J#,奇怪的错误。但问题是我将一个 .java 文件复制到我的项目文件夹中并且出现了问题。一旦我删除了它,它就再次编译得很好。

于 2011-03-24T14:12:43.220 回答
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'">
于 2013-11-07T02:12:30.827 回答
0

尝试安装以下软件包之一:

32 位:http ://www.microsoft.com/download/en/details.aspx?id=18084

64 位:http ://www.microsoft.com/download/en/confirmation.aspx?id=15468

当其他解决方案都不起作用时,这让我克服了错误。

于 2012-01-18T14:15:06.033 回答