gpt4 book ai didi

asp.net-mvc-3 - 如何从 MVC 3 和 IIS7 提供程序集嵌入资源?

转载 作者:行者123 更新时间:2023-12-04 06:03:40 25 4
gpt4 key购买 nike

我正在开发具有“插件”功能的 MVC 3 应用程序。这
插件是嵌入了所有必需资源(css、图像和脚本)的 C# dll。

我使用了“MvcRazorClassGenerator”Visual Studio 扩展来创建预编译 View 。

我使用以下代码检索嵌入的资源:

public FileStreamResult EmbeddedResource(string pluginName, string resourceName)
{
Assembly assembly = PluginCache.GetAssembly(pluginName);

if (assembly != null)
{
string tempResourceName =
assembly.GetManifestResourceNames()
.ToList().FirstOrDefault(f => f.EndsWith(resourceName));

return new FileStreamResult(
assembly.GetManifestResourceStream(tempResourceName),
GetMIMEType(tempResourceName));
}

return null;
}

在 View 中,我有以下代码来访问资源:
@Url.Content("/Common/EmbeddedResource/PluginName/[AssemblyNamespace].Content.Images.blank.gif")

当我在开发环境中时一切正常,所有资源都已正确加载和显示,但是在部署时,噩梦开始了。

IIS 7.5 一直在搜索名为“/Common/EmbeddedResource/PluginName/[AssemblyNamespace].Content.Images.blank.gif”的静态文件,而不是嵌入文件,给我所有嵌入资源的 404 错误。

我已经尝试安装本站点上一个问题提到的修补程序并更改配置文件,但未加载资源。

我正在尝试部署到 Windows 2008 Server R2 SP1 64 位。

最佳答案

问题可能是使用

Url.Content("/Common/EmbeddedResource/PluginName/[AssemblyNamespace].Content.Images.blank.gif")

我有相同的设置,但由于内容是从我使用的操作中提供的
@Url.Action("EmbeddedResource", "EmbeddedResources", new { pluginName = "PluginName", resourceName = "MyProject.Scripts.MyScript.js" })

然后我设置了一条路线
routes.MapRoute(
"EmbeddedResources",
"EmbeddedResources/{pluginName}/{resourceName}",
new { controller = "EmbeddedResources", action = "EmbeddedResource", pluginName = "DefaultPluginName", resourceName = UrlParameter.Optional });

这导致脚本引用像这样
<script type='text/javascript' src='/EmbeddedResources/PluginName/MyProject.Scripts.MyScript.js'></script>

如果您采用这种方法,您可能还想缩小嵌入的文件(用于发布版本)。您可以使用 MSBuild 任务执行此操作,详情请参见 this blog post .
 <Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />
<PropertyGroup>
<ResGenDependsOn>
MinifyJavaScript;
$(ResGenDependsOn)
</ResGenDependsOn>
</PropertyGroup>
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<Target Name="MinifyJavaScript" Condition=" '$(ConfigurationName)'=='Release' ">
<Copy SourceFiles="@(EmbeddedResource)" DestinationFolder="$(IntermediateOutputPath)" Condition="'%(Extension)'=='.js'">
<Output TaskParameter="DestinationFiles" ItemName="EmbeddedJavaScriptResource" />
</Copy>
<AjaxMin JSSourceFiles="@(EmbeddedJavaScriptResource)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".js" CssSourceFiles="@(CSS)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".css" JSLocalRenaming="CrunchAll" />
<ItemGroup>
<EmbeddedResource Remove="@(EmbeddedResource)" Condition="'%(Extension)'=='.js'" />
<EmbeddedResource Include="@(EmbeddedJavaScriptResource)" />
<FileWrites Include="@(EmbeddedJavaScriptResource)" />
</ItemGroup>
</Target>

关于asp.net-mvc-3 - 如何从 MVC 3 和 IIS7 提供程序集嵌入资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com