我们的团队正在尝试为所有语言翻译实现一个主csv文件,以使我们的系统团队能够维护我们的资源文件。我正在创建一个dll,该dll将在构建之前调用,以便将上述csv文件转换为各自的resx和designer文件。我已经完成了生成resx文件和设计器文件的工作,但是很难将生成的新resx文件正确地添加到资源项目中。我查看了this解决方案来向项目添加一个文件,但是我不能正确地添加依赖项。
这是我想要使用的代码
var p =
Microsoft.Build.Evaluation
.ProjectCollection.GlobalProjectCollection
.LoadedProjects.FirstOrDefault(pr => pr.FullPath == projFilePath);
if (p == null)
p = new Microsoft.Build.Evaluation.Project(projFilePath);
p.AddItem("Folder", @"C:\projects\BabDb\test\test2");
p.AddItem("Compile", @"C:\projects\BabDb\test\test2\Class1.cs");
p.Save();发布于 2019-11-14 19:36:23
对于任何一个可能会在这个问题上绊脚石的人,下面是我是如何解决这个问题的
var resourceProject = Microsoft.Build.Evaluation
.ProjectCollection.GlobalProjectCollection
.LoadedProjects.FirstOrDefault(pr => pr.FullPath == projFilePath);
if (resourceProject == null)
resourceProject = new Microsoft.Build.Evaluation.Project(projFilePath);
//add resx file if it doesn't exist in the project
if (resourceProject.Items.FirstOrDefault(i => i.EvaluatedInclude == path) == null)
{
string designerPath = path.Replace(".resx", ".Designer.cs");
//Add metadata when the resx file has a designer file
resourceProject.AddItem("EmbeddedResource", path);
if (withDesigner)
{
var projectItem = resourceProject.Items.FirstOrDefault(i => i.EvaluatedInclude == path);
projectItem.SetMetadataValue("Generator", "ResXFileCodeGenerator");
projectItem.SetMetadataValue("LastGenOutput", Path.GetFileName(designerPath));
resourceProject.AddItem("Compile", designerPath);
var designerItem = resourceProject.Items.FirstOrDefault(i => i.EvaluatedInclude == designerPath);
designerItem.SetMetadataValue("AutoGen", "True");
designerItem.SetMetadataValue("DesignTime", "True");
designerItem.SetMetadataValue("DependentUpon", Path.GetFileName(path));
}
resourceProject.Save();
}https://stackoverflow.com/questions/58827503
复制相似问题