2010-02-09 109 views
5

我在Visual Studio Express的一个解决方案,看起来像这样:为什么在文件更新时“复制如果更新”不复制文件?

LogicSchema类在C#中,将分析在运行时指定的XML文件。以下是在main方法Program.cs

LogicSchema ls = new LogicSchema(
    XDocument.Load(
     "schemas\\C#Schema.xml", 
     LoadOptions.PreserveWhitespace)); 

我创造了我的解决方案被称为“模式”,保存XML文件,并设置生成操作内容和“复制到输出目录”的文件夹值为复制如果更新

我的期望是,如果在记事本中打开文件,进行更改并保存,则当按F5时,XML文件的更新版本将被复制到输出目录(在本例中为bin \ debug) 。但是,除非我选择重建,否则更新的文件不会复制到输出目录。定期内部版本不起作用。

我需要更改什么,以便当我按F5时,文件被更新时复制到输出目录?

回答

2

您是否尝试将生成操作设置为无?

+0

感谢您的建议,但似乎并不奏效。 – 2010-02-09 16:04:52

+0

我已经尝试了VS2010 Beta 2中的相同场景,它可以工作。看起来像快递版中的一个错误。 – Ikaso 2010-02-09 19:27:10

2

似乎在Visual Studio 2008 Team System的工作也 - 必须表达特定版本,所以不能瑞普...

OK,我原来的猜测是不正确的 - 它是关于XML文件在被引用的库中。现在可以重新制作它。

我认为最自然的方法是将XML作为资源嵌入,然后用GetManifestResourceStream()读取它。这样,即使您直接引用dll而不是通过项目引用,XML文件也会在您引用dll时不会单独复制它。

...或者你可以使用Pre-build事件吗? (项目属性 - 建立事件):

copy $(ProjectDir)test.xml $(SolutiontDir)projectFolder\bin\debug\test.xml 

我会认为即使VS认为没有源文件已经改变,它会一直运行。至少在VS2008完全是这样的 - 刚刚测试。

+0

它可能与“schemas”文件夹是* LogicParser *的一部分,而Program.cs,LogicSchema正在实例化的类位于* LogicParser.ConsoleApp *中有关。 – 2010-02-11 17:45:15

+0

真:当我测试这个时,我懒得做单独的类库。现在做了它,它也发生在Visual Studio的完整版本中。所以不是表达版本特定的。 所以我想你的选择是用$(SolutionDir)添加预构建事件,或者然后嵌入xml作为资源并使用GetManifestResourceStream()读取它。 我认为后者更好 - 如果你正在创建一个dll,如果你可以通过引用它而不添加其他(xml)文件来使用它,会更好。 – Ope 2010-02-14 14:18:54

相关问题