我正在尝试在VS2015中创建新的资源文件.我创建它们很好,但是当我尝试更改"访问修饰符"时,下拉列表被禁用...
有任何想法吗?
我正在使用ASP.NET MVC 6(ASP.NET5).该项目是一个类库,但我在Web项目中测试了相同的结果.
谢谢!!
我正在开发一款同时针对Android的Windows Phone 8.1应用程序(Xamarin)
我一直在PCL上添加我的字符串资源(.resx)并在我的启动器项目中引用它们以在我的视图上使用它,这在WP 8.1 silverlight上运行正常,但在配置项目以释放并运行它时在WinRt上运行在设备上,由于某种原因,我总是得到一个MissingManifestResourceException.我已经尝试过解决这个问题的所有解决方案而没有任何成功.
请注意,在模拟器上一切正常,当解决方案配置器设置为Debug时,它也适用于设备和模拟器.这里唯一的组合是设备和发布.
应用源代码在Github上.
我能够创建一个简单的项目来复制这个问题,基本上它是一个WP 8.1应用程序和一个带有嵌入式资源的PCL项目,下载链接
有人有什么想法吗?
编辑:经过一些更多的测试,我尝试运行一个旧的Windows 8.1应用程序,我已经使用相同的本地化模型,并出现相同的问题所以它接缝是一个工具问题而不是配置问题,因为Windows 8.1应用程序是在市场上,一切都很顺利.
resx embedded-resource windows-phone windows-runtime windows-phone-8.1
为了将项目设置合并到C++和C#项目的属性表中,构造了以下属性表:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
Trying to support both C++ and C# projects by introducing derived
properties and setting the appropriate output properties.
-->
<PropertyGroup Label="UserMacros">
<ProjectOrAssemblyName Condition="'$(AssemblyName)'==''">$(ProjectName)</ProjectOrAssemblyName>
<ProjectOrAssemblyName Condition="'$(ProjectName)'==''">$(AssemblyName)</ProjectOrAssemblyName>
<ShortPlatform Condition="'$(Platform)'=='Win32'">x86</ShortPlatform>
<ShortPlatform Condition="'$(Platform)'=='x86'">x86</ShortPlatform>
<ShortPlatform Condition="'$(Platform)'=='x64'">x64</ShortPlatform>
<ShortPlatform Condition="'$(Platform)'=='AnyCPU'">AnyCPU</ShortPlatform>
</PropertyGroup>
<PropertyGroup>
<OutputPath>$(OutputRelativePath)/$(ProjectOrAssemblyName)_$(ShortPlatform)_$(Configuration)/</OutputPath>
<BaseIntermediateOutputPath>$(OutputRelativePath)/Obj_Exe/$(ProjectOrAssemblyName)_$(ShortPlatform)</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)_$(Configuration)/</IntermediateOutputPath>
<IntDir>$(IntermediateOutputPath)</IntDir>
<OutDir>$(OutputPath)</OutDir>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
此属性表将所有构建输出移动到单独的位置OutputRelativePath(在单独的属性表中定义或直接在项目文件中定义)外部目录,其中包含源代码以便于清理等.但是,在设置完成后,构建工作正常并且所有单元测试工作正常,很明显WPF可执行项目并不好,因为使用上面的属性表运行应用程序导致臭名昭着:
IOException was unhandled "Cannot locate resource 'app.xaml'."
Run Code Online (Sandbox Code Playgroud)
为什么更改输出路径会导致此错误?如何确定原因是项目构建输出路径?这可以在生成的代码中看到吗?我找不到?这不是一个错误吗?
注意:使用以下属性表工作,但仅当IntermediateOutputPath包含BaseIntermediateOutputPath时.
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputPath>$(OutputRelativePath)/$(AssemblyName)_$(Platform)_$(Configuration)</OutputPath>
<BaseIntermediateOutputPath>$(OutputRelativePath)/Obj_Exe/$(AssemblyName)_$(Platform)</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseIntermediateOutputPath)_$(Configuration)</IntermediateOutputPath>
</PropertyGroup>
</Project> …Run Code Online (Sandbox Code Playgroud) 我想两个如何在两个(或更多)项目之间共享资源文件?
所以,要恢复,我有三个项目:
包含资源文件的开发项目(CF.NET)(包含所有定义).
我还有两个空的项目但是链接到开发项目,每次只是一个不同的构建,所以当我修改开发项目时,所有三个项目也都会更新.(修改csproj文件.)
问题是,资源文件怎么样?当我尝试从开发项目访问时,我获得了所有资源,但是当我从另外2个人那里尝试时,它会抛出"MissingManifestResourceException".
不知道如何解决这个问题?
谢谢.
[编辑]
这就是我所做的:
创建一个名为"RealProject"的项目,其中包含所有代码(包括资源文件)创建一个名为"LinkedProject"的项目,其中不包含任何内容(我删除了所有文件并修改csproj文件,如下所示:
<ItemGroup>
<Compile Include="..\RealProject\**\*.cs" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
所以在LinkedProject目录中我只有:
整个LinkedProject使用RealProject文件,它只是一个不同的配置构建(请参阅此处了解原因:C# - .NET和CF.NET的代码编译器)
进入该配置后,我无法访问RealProject中的资源文件...
如果您需要屏幕或更详细的解释,请询问.
[编辑]
有了这个代码,它的工作原理,资源管理器没有加载好的程序集名称,但它应该存在更好的解决方案!
Assembly ass = Assembly.ReflectionOnlyLoadFrom(@"..\..\..\RealProject\bin\Debug\RealProject.dll");
ResourceManager manager = new ResourceManager("RealProject.Properties.Resources", ass);
Run Code Online (Sandbox Code Playgroud)
[解]
要检查的事项:
测试!
我们试图让我们的C#应用程序编译和运行与两
但是,.csproj文件中的部分(对于Visual Studio):
<Compile Include="Foo\Bar.cs" />
<EmbeddedResource Include="Foo\Bar.resx">
<DependentUpon>Bar.cs</DependentUpon>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)
必须在使用MonoDevelop/gmcs之前进行如下更改(如果没有,在运行时,resources.GetObject()将抛出MissingManifestResourceException):
<Compile Include="Foo\Bar.cs" />
<EmbeddedResource Include="Foo\Bar.resx">
<DependentUpon>Foo\Bar.cs</DependentUpon>
</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)
如何将其重写为他们都接受的形式?(DependentUpon当然,没有删除元素.)
我正在开发一个可本地化的应用程序.在我的"本地"资源文件中,我使用默认语言(英语),如果可能的话,我加载用户的首选项和文化,并加载翻译成语言的字符串.
所以我做了什么:
private static CultureInfo _culture = CultureInfo.CurrentUICulture;
private static ResourceManager _manager;
private static void ToNeutralCulture()
{
while (!_culture.IsNeutralCulture)
{
_culture = _culture.Parent;
}
}
private static void LoadCulture()
{
ResourceManager manager = Properties.Resources.ResourceManager;
try
{
ToNeutralCulture();
string assembly = Assembly.GetCallingAssembly().GetName().CodeBase;
string assemblyDir = Path.GetDirectoryName(assembly);
string assemblyName = Path.GetFileNameWithoutExtension(assembly);
string resourceFileName = string.Format(CultureInfo.InvariantCulture,
@"{0}\{1}_{2}.dll",
assemblyDir,
assemblyName,
_culture.Name.ToUpper());
FileInfo resourceFile = new FileInfo(resourceFileName);
if (resourceFile.Exists)
{
Assembly resourceAssembly = Assembly.LoadFrom(resourceFile.FullName);
string[] manifests = resourceAssembly.GetManifestResourceNames();
if (manifests.Length == 1)
{
manager = …Run Code Online (Sandbox Code Playgroud) 我在命令行上使用MSBuild在构建服务器上的C#项目的嵌入资源有问题.在Visual Studio中构建和运行测试时,该项目工作得很好,但是当从命令行运行MSBuild时,运行测试时会出现以下问题:
System.Resources.MissingManifestResourceException:找不到适合指定文化或中性文化的任何资源.确保".Properties.Resources.resources"在编译时正确嵌入或链接到程序集"",或者所有所需的附属程序集都是可加载和完全签名的.
System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture,Boolean)中的System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo文化,Dictionary`2 localResourceSets,Boolean tryParents,Boolean createIfNotExists,StackCrawlMark和stackMark)中的System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)位于System.Resources.get_SomeResource()的System.Resources.ResourceManager.GetString(String name,CultureInfo culture)的System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture,Boolean createIfNotExists,Boolean tryParents)中的createIfNotExists,Boolean tryParents,StackCrawlMark和stackMark\Properties\Resources.Designer.cs:第87行
我已将问题跟踪到生成的IL(我使用ildasm).在Visual Studio中进行扩展时,在程序集的清单中设置以下内容:
.mresource public <PROJECTNAME>.Properties.Resources.resources
{
// Offset: 0x00000000 Length: 0x00000236
}
Run Code Online (Sandbox Code Playgroud)
但是在使用MSBuild构建时会生成以下输出:
.mresource public '../..//Build/<PROJECTNAME>_AnyCPU_Debug_Obj/<PROJECTNAME>.Properties.Resources.resources'
{
// Offset: 0x00000000 Length: 0x00000236
}
Run Code Online (Sandbox Code Playgroud)
因为可以看到资源的路径突然成为资源名称的一部分.
有没有人有任何想法如何解决这个问题?
c# ×5
msbuild ×2
resources ×2
resx ×2
asp.net ×1
asp.net-core ×1
assemblies ×1
csproj ×1
il ×1
monodevelop ×1
wpf ×1
xaml ×1